日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達者為師

網(wǎng)站首頁 編程語言 正文

詳解Go語言如何進行Http調(diào)用_Golang

作者:陳明勇 ? 更新時間: 2023-01-14 編程語言

前言

無論是微服務(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)體去封裝。我們可以通過 NewRequestWithContextNewRequest 函數(shù)獲取一個基礎(chǔ)的 Request 結(jié)構(gòu)體指針變量。

NewRequestWithContext(ctx context.Context, method, url string, body io.Reader) (*Request, error)

  • 參數(shù) ctxContext 的接口類型,任意實現(xiàn) Context 接口的自定義類型都可以作為此參數(shù)傳遞。
  • 參數(shù) methodHTTP 方法參數(shù),可選值有 GETPOSTDELETEPUT等。
  • 參數(shù) url 為接口的請求路徑。
  • 參數(shù) body,為請求體參數(shù)。

通過 client.Do(req) 方法調(diào)用之后,返回值有 (*Response, error),第一個是響應(yīng)結(jié)構(gòu)體參數(shù),第二個是錯誤參數(shù)。通過讀取 Responsebody 的值,可以獲取接口的響應(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)碼可以通過 ResponseStatusCode 字段進行查看。
  • 接口請求成功之后,通過 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

欄目分類
最近更新