热门:Go HTTP 调用(上)

2022-12-14 11:22:55 来源:51CTO博客


【资料图】

耐心和持久胜过激烈和狂热。

哈喽大家好,我是陈明勇,今天分享的内容是 Go HTTP 调用。如果本文对你有帮助,不妨点个赞,如果你是 Go 语言初学者,不妨点个关注,一起成长一起进步,如果本文有错误的地方,欢迎指出!

前言

无论是微服务还是单体架构等,服务间都有相互通信的时候,而最直接的通信方法就是 ​​HTTP​​​ 调用,本文将会介绍在 ​​Go​​​ 语言里,如何进行 ​​HTTP​​ 调用,并举例说明。

前置知识

​HTTP​​​ 调用需要通过 ​​http​​​ 包里的 ​​Client​​​ 结构体里的 ​​Do​​​ 方法去实现,因此需要先声明一个 ​​Client​​ 结构体变量,该结构体可以设置超时时间等配置。对于一个请求里的 ​​URL​​​,查询参数,请求 ​​method​​​ 等参数,需要 ​​http​​​ 包里的 ​​Request​​​ 结构体去封装。我们可以通过 ​​NewRequestWithContext​​​ 或 ​​NewRequest​​​ 函数获取一个基础的 ​​Request​​ 结构体指针变量。​​NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error)​​参数 ​​ctx​​​ 为 ​​Context​​​ 的接口类型,任意实现 ​​Context​​ 接口的自定义类型都可以作为此参数传递。参数 ​​method​​​ 为 ​​HTTP​​​ 方法参数,可选值有 ​​GET​​​、​​POST​​​、​​DELETE​​​、​​PUT​​等。参数 ​​url​​ 为接口的请求路径。参数 ​​body​​,为请求体参数。通过 ​​client.Do(req)​​​ 方法调用之后,返回值有 ​​(*Response, error)​​​,第一个是响应结构体参数,第二个是错误参数。通过读取 ​​Response​​​ 的 ​​body​​ 的值,可以获取接口的响应体。

GET 请求

import (  "context"  "fmt"  "io"  "net/http")func main() {  client := http.Client{}  request, err := http.NewRequestWithContext(context.Background(), http.MethodGet, "http://localhost:8080/user?name=tom", nil)  if err != nil {    return  }  request.Header.Set("headerParam", "header")  resp, err := client.Do(request)  if err != nil {    fmt.Println(err)    return  }  bytes, err := io.ReadAll(resp.Body)  if err != nil {    return  }  defer resp.Body.Close()  fmt.Println(string(bytes)) // {"code":0,"data":{"list":[{"name":"小明","age":20},{"name":"小红","age":18}]},"message":"success"}}
需要携带查询参数时,可以直接拼接在 ​​url​​ 字符串上面。​​header​​​ 参数可以通过 request 结构体的 ​​Header​​​ 字段的 ​​set​​​ 方法或 ​​add​​ 方法进行设置。HTTP 请求响应码可以通过 ​​Response​​​ 的 ​​StatusCode​​ 字段进行查看。接口请求成功之后,通过 ​​io.ReadAll​​​ 方法,读取 ​​resp.Body​​ 响应体信息。除了直接在 ​​url​​​ 上拼接 ​​query​​​ 参数的方式,我们还可以通过以下方式进行添加 ​​query​​ 参数:
params := url.Values{}rawUrl, err := url.Parse("http://localhost:8080/user")if err != nil {  return}params.Set("name", "tom")rawUrl.RawQuery = params.Encode()u := rawUrl.String()

通过 ​​url.Values​​​ 结构体的 ​​set​​​ 方法设置 query参数,​​url​​​ 通过 ​​url.Parse​​​ 函数生成一个 ​​URL​​​ 结构体指针变量,​​rawUrl.RawQuery = params.Encode()​​​ 通过这行代码将 ​​query​​​ 参数和 ​​url​​​ 进行绑定,最后通过 ​​String()​​​ 方法将 ​​url​​​ 转换成 ​​string​​ 类型。

小结

本文介绍了在 ​​Go​​​ 语言里如何进行 ​​HTTP​​​ 调用,需要通过 ​​http​​​ 包里的 ​​Client​​​ 结构体变量,调用其方法 ​​Do​​​ 进行 ​​HTTP​​​ 调用,在 ​​HTTP​​​ 调用前,需要通过 ​​http​​​ 包里的 ​​Request​​​ 结构体封装请求路径和请求参数。最后通过 ​​GET​​​ 请求案例讲述了 ​​query​​​ 参数和 ​​header​​ 参数如何设置,以及响应体的获取方法。

标签: 指针变量 函数生成 请求参数

上一篇:每日热闻!C语言大一期末复习基础知识点
下一篇:#yyds干货盘点#聊聊vuex的Mutations和Actions