Go 语言 常用标准库 介绍

906 阅读1分钟

httpclient

之前介绍过 http server的写法。这次来看看 client怎么写

func main() {
   resp, err := http.Get("https://www.baidu.com")
   if err != nil {
      panic(err)
   }
   defer resp.Body.Close()
   s, err := httputil.DumpResponse(resp, true)
   if err != nil {
      panic(err)
   }
   fmt.Println(string(s))

}

我们请求一个百度首页 打印下他的返回

image.png

这里可能有人会奇怪 为啥要string(s) 来看下dump 这个函数 他返回的是一个byte数组 所以必须string 转一下,否则 这里展示的就是纯byte了

image.png

这里呢 我们当然也可以 设置 请求的header

func main() {

   request,err:=http.NewRequest(http.MethodGet,"https://juejin.cn",nil)
   request.Header.Add("user-agent","Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")
   resp, err := http.DefaultClient.Do(request)
   if err != nil {
      panic(err)
   }
   defer resp.Body.Close()
   s, err := httputil.DumpResponse(resp, true)
   if err != nil {
      panic(err)
   }
   fmt.Println(string(s))

}

那同样的 我们也可以自定义client 来监听请求途中的 重定向 等轨迹行为

func main() {

   request, err := http.NewRequest(http.MethodGet, "https://imooc.com", nil)
   request.Header.Add("user-agent", "Mozilla/5.0 (iPhone; CPU iPhone OS 13_2_3 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0.3 Mobile/15E148 Safari/604.1")

   client := http.Client{
      CheckRedirect: func(req *http.Request, via []*http.Request) error {
         fmt.Println("redirect:", req)
         return nil
      },
   }

   resp, err := client.Do(request)
   if err != nil {
      panic(err)
   }
   defer resp.Body.Close()
   s, err := httputil.DumpResponse(resp, true)
   if err != nil {
      panic(err)
   }
   fmt.Println(string(s))

}

可以看下日志打印

image.png

其他标准库简单介绍

godoc -http :8888

可以用上述命令开一个本地的http 文档

这个bufio 主要是提高写入io效率的,可以把数先写入缓存 然后最后一次行flush到硬盘中 image.png

开发者最常用的应该就是encoding json库了

image.png

时间库 也是常用的,比如说 超时 定时之类的 image.png

另外还有一些 string math rand 等这些其他语言中也有的库 大家可以自行利用godoc去学习

另外标准库我们还可以参考 studygolang.com/pkgdoc 中文翻译 来进行学习