網(wǎng)站首頁 編程語言 正文
前言
無論是微服務(wù)還是單體架構(gòu)等,服務(wù)間都有相互通信的時候,而最直接的通信方法就是 HTTP
調(diào)用,本文將會介紹在 Go
語言里,如何進行 HTTP
調(diào)用,并舉例說明。
前置知識
HTTP
調(diào)用需要通過 http
包里的 Client
結(jié)構(gòu)體里的 Do
方法去實現(xiàn),因此需要先聲明一個 Client
結(jié)構(gòu)體變量,該結(jié)構(gòu)體可以設(shè)置超時時間等配置。
對于一個請求里的 URL
,查詢參數(shù),請求 method
等參數(shù),需要 http
包里的 Request
結(jié)構(gòu)體去封裝。我們可以通過 NewRequestWithContext
或 NewRequest
函數(shù)獲取一個基礎(chǔ)的 Request
結(jié)構(gòu)體指針變量。
NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error)
- 參數(shù)
ctx
為Context
的接口類型,任意實現(xiàn)Context
接口的自定義類型都可以作為此參數(shù)傳遞。 - 參數(shù)
method
為HTTP
方法參數(shù),可選值有GET
、POST
、DELETE
、PUT
等。 - 參數(shù)
url
為接口的請求路徑。 - 參數(shù)
body
,為請求體參數(shù)。
通過 client.Do(req)
方法調(diào)用之后,返回值有 (*Response, error)
,第一個是響應(yīng)結(jié)構(gòu)體參數(shù),第二個是錯誤參數(shù)。通過讀取 Response
的 body
的值,可以獲取接口的響應(yīng)體。
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"} }
- 需要攜帶查詢參數(shù)時,可以直接拼接在
url
字符串上面。 -
header
參數(shù)可以通過 request 結(jié)構(gòu)體的Header
字段的set
方法或add
方法進行設(shè)置。 - HTTP 請求響應(yīng)碼可以通過
Response
的StatusCode
字段進行查看。 - 接口請求成功之后,通過
io.ReadAll
方法,讀取resp.Body
響應(yīng)體信息。 - 除了直接在
url
上拼接query
參數(shù)的方式,我們還可以通過以下方式進行添加query
參數(shù):
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
結(jié)構(gòu)體的 set
方法設(shè)置 query參數(shù),url
通過 url.Parse
函數(shù)生成一個 URL
結(jié)構(gòu)體指針變量,rawUrl.RawQuery = params.Encode()
通過這行代碼將 query
參數(shù)和 url
進行綁定,最后通過 String()
方法將 url
轉(zhuǎn)換成 string
類型。
小結(jié)
本文介紹了在 Go 語言里如何進行 HTTP 調(diào)用,需要通過 http
包里的 Client
結(jié)構(gòu)體變量,調(diào)用其方法 Do
進行 HTTP
調(diào)用,在 HTTP 調(diào)用前,需要通過 http 包里的 Request
結(jié)構(gòu)體封裝請求路徑和請求參數(shù)。最后通過 GET
請求案例講述了 query
參數(shù)和 header
參數(shù)如何設(shè)置,以及響應(yīng)體的獲取方法。
原文鏈接:https://juejin.cn/post/7176663096860082237
相關(guān)推薦
- 2022-04-12 input file詳細介紹、更改css樣式、獲取圖片地址、徹底清空上傳文件(建議收藏)
- 2023-07-25 mybatis-plus在實際開發(fā)中的應(yīng)用
- 2023-02-27 c++數(shù)組排序的5種方法實例代碼_C 語言
- 2022-05-02 Numpy中創(chuàng)建數(shù)組的9種方式小結(jié)_python
- 2022-05-28 Python實現(xiàn)孤立隨機森林算法的示例代碼_python
- 2022-04-16 pycharm三個有引號不能自動生成函數(shù)注釋的問題_python
- 2022-08-14 Hyper-V設(shè)置虛擬機固定Ip的方法步驟_Hyper-V
- 2022-08-19 python查看自己安裝的所有庫并導(dǎo)出的命令_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支