Go语言之Web开发以及http编程

http编程

http建立的仍是TCP连接,用的是http协议

  • 服务端开发
package main

import (
	"fmt"
	"net/http"
)

func Hello(w http.ResponseWriter, r *http.Request) {
	fmt.Println("handle hello")
	fmt.Fprintf(w, "hello ")
}

func main() {
	http.HandleFunc("/", Hello)
	err := http.ListenAndServe("0.0.0.0:8880", nil)
	if err != nil {
		fmt.Println("http listen failed")
	}
}

打开游览器输入:localhost:8880
游览器显示:hello
终端输出:handle hello

  • 客户端开发
package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	res, err := http.Get("https://www.baidu.com/")
	if err != nil {
		fmt.Println("get err:", err)
		return
	}

	data, err := ioutil.ReadAll(res.Body)
	if err != nil {
		fmt.Println("get data err:", err)
		return
	}

	fmt.Println(string(data))
}

常见请求方法

  • Get请求-服务器读资源
  • Post请求-更新资源
  • Put请求-创建资源
  • Delete请求-删除资源
  • Head请求-是否同步/正常

Head请求

package main

import (
	"fmt"
	"net"
	"net/http"
	"time"
)

var url = []string{
	"http://www.baidu.com",
	"http://google.com",
	"http://taobao.com",
}

func main() {

	for _, v := range url {

		// 自定义一个客户端
		c:= http.Client{
			Transport: &http.Transport{
				Dial :func (network, addr string) (net.Conn, error)  {
					timeout:=time.Second*2
					return net.DialTimeout(network,addr,timeout)
				},
			},
		}

		resp, err := c.Head(v)
		if err != nil {
			fmt.Printf("head %s failed, err:%v\n", v, err)
			continue
		}
		fmt.Printf("head succ, status:%v\n", resp.Status)
	}
}

常见的状态码

  • http.StatusContinue = 100 请求服务端
  • http.StatusOK = 200 成功
  • http.StatusFound = 302 跳转
  • http.StatusBadRequest = 400 非法请求
  • http.StatusUnauthorized = 401 权限未通过
  • http.StatusForbidden = 403 禁止访问
  • http.StatusNotFound = 404 页面不存在
  • http.StatusInternalServerError = 500 内部错误

模板

  • if判断
<html>
        <head>
        </head>
        <body>
                {{if gt .Age 18}}
                <p>hello, old man, {{.Name}}</p>
                {{else}}
                <p>hello,young man, {{.Name}}</p>
                {{end}}
        </body>
</html>
	•	not 非{{if not .condition}} {{end}}
	•	and 与{{if and .condition1 .condition2}} {{end}}
	•	or 或{{if or .condition1 .condition2}} {{end}}
	•	eq 等于{{if eq .var1 .var2}} {{end}}
	•	ne 不等于{{if ne .var1 .var2}} {{end}}
	•	lt 小于 (less than){{if lt .var1 .var2}} {{end}}
	•	le 小于等于{{if le .var1 .var2}} {{end}}
	•	gt 大于{{if gt .var1 .var2}} {{end}}
	•	ge 大于等于{{if ge .var1 .var2}} {{end}}
  • 接受到的模板
    {{.}}
<html>
        <head>
        </head>
        <body>
                <p>hello, old man, {{.}}</p>
        </body>
</html>
  • 循环
<html>
        <head>
        </head>
        <body>
                {{range .}}
                    {{if gt .Age 18}}
                    <p>hello, old man, {{.Name}}</p>
                    {{else}}
                    <p>hello,young man, {{.Name}}</p>
                    {{end}}
                {{end}}
        </body>
</html>
发布了40 篇原创文章 · 获赞 26 · 访问量 7680

猜你喜欢

转载自blog.csdn.net/weixin_44879611/article/details/104215134