最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2022年12月15日 09:12:19   作者:陳明勇  
無論是微服務(wù)還是單體架構(gòu)等,服務(wù)間都有相互通信的時(shí)候,而最直接的通信方法就是 HTTP 調(diào)用,本文將會介紹在 Go 語言里,如何進(jìn)行 HTTP 調(diào)用,需要的可以參考一下

前言

無論是微服務(wù)還是單體架構(gòu)等,服務(wù)間都有相互通信的時(shí)候,而最直接的通信方法就是 HTTP 調(diào)用,本文將會介紹在 Go 語言里,如何進(jìn)行 HTTP 調(diào)用,并舉例說明。

前置知識

HTTP 調(diào)用需要通過 http 包里的 Client 結(jié)構(gòu)體里的 Do 方法去實(shí)現(xiàn),因此需要先聲明一個(gè) Client 結(jié)構(gòu)體變量,該結(jié)構(gòu)體可以設(shè)置超時(shí)時(shí)間等配置。

對于一個(gè)請求里的 URL,查詢參數(shù),請求 method 等參數(shù),需要 http 包里的 Request 結(jié)構(gòu)體去封裝。我們可以通過 NewRequestWithContextNewRequest 函數(shù)獲取一個(gè)基礎(chǔ)的 Request 結(jié)構(gòu)體指針變量。

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

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

通過 client.Do(req) 方法調(diào)用之后,返回值有 (*Response, error),第一個(gè)是響應(yīng)結(jié)構(gòu)體參數(shù),第二個(gè)是錯(cuò)誤參數(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ù)時(shí),可以直接拼接在 url 字符串上面。
  • header 參數(shù)可以通過 request 結(jié)構(gòu)體的 Header 字段的 set 方法或 add 方法進(jìn)行設(shè)置。
  • HTTP 請求響應(yīng)碼可以通過 ResponseStatusCode 字段進(jìn)行查看。
  • 接口請求成功之后,通過 io.ReadAll 方法,讀取 resp.Body 響應(yīng)體信息。
  • 除了直接在 url 上拼接 query 參數(shù)的方式,我們還可以通過以下方式進(jìn)行添加 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ù)生成一個(gè) URL 結(jié)構(gòu)體指針變量,rawUrl.RawQuery = params.Encode() 通過這行代碼將 query 參數(shù)和 url 進(jìn)行綁定,最后通過 String() 方法將 url 轉(zhuǎn)換成 string 類型。

小結(jié)

本文介紹了在 Go 語言里如何進(jìn)行 HTTP 調(diào)用,需要通過 http 包里的 Client 結(jié)構(gòu)體變量,調(diào)用其方法 Do 進(jìn)行 HTTP 調(diào)用,在 HTTP 調(diào)用前,需要通過 http 包里的 Request 結(jié)構(gòu)體封裝請求路徑和請求參數(shù)。最后通過 GET 請求案例講述了 query 參數(shù)和 header 參數(shù)如何設(shè)置,以及響應(yīng)體的獲取方法。

到此這篇關(guān)于詳解Go語言如何進(jìn)行Http調(diào)用的文章就介紹到這了,更多相關(guān)Go語言Http調(diào)用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文搞懂Golang 時(shí)間和日期相關(guān)函數(shù)

    一文搞懂Golang 時(shí)間和日期相關(guān)函數(shù)

    這篇文章主要介紹了Golang 時(shí)間和日期相關(guān)函數(shù),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • 詳解Go語言實(shí)現(xiàn)線性查找算法和二分查找算法

    詳解Go語言實(shí)現(xiàn)線性查找算法和二分查找算法

    線性查找又稱順序查找,它是查找算法中最簡單的一種。二分查找,也稱折半查找,相比于線性查找,它是一種效率較高的算法。本文將用Go語言實(shí)現(xiàn)這兩個(gè)查找算法,需要的可以了解一下
    2022-12-12
  • go單例實(shí)現(xiàn)雙重檢測是否安全的示例代碼

    go單例實(shí)現(xiàn)雙重檢測是否安全的示例代碼

    這篇文章主要介紹了go單例實(shí)現(xiàn)雙重檢測是否安全,本文給大家分享雙重檢驗(yàn)示例代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • GoLang unsafe包詳細(xì)講解

    GoLang unsafe包詳細(xì)講解

    從golang的定義來看,unsafe 是類型安全的操作。顧名思義,它應(yīng)該非常謹(jǐn)慎地使用; unsafe可能很危險(xiǎn),但也可能非常有用。例如,當(dāng)使用系統(tǒng)調(diào)用和Go結(jié)構(gòu)必須具有與C結(jié)構(gòu)相同的內(nèi)存布局時(shí),您可能別無選擇,只能使用unsafe
    2022-10-10
  • golang中channel+error來做異步錯(cuò)誤處理有多香

    golang中channel+error來做異步錯(cuò)誤處理有多香

    官方推薦golang中錯(cuò)誤處理當(dāng)做值處理, 既然是值那就可以在channel中傳輸,這篇文章主要介紹了golang 錯(cuò)誤處理channel+error真的香,需要的朋友可以參考下
    2023-01-01
  • Go語言正則表達(dá)式用法實(shí)例小結(jié)【查找、匹配、替換等】

    Go語言正則表達(dá)式用法實(shí)例小結(jié)【查找、匹配、替換等】

    這篇文章主要介紹了Go語言正則表達(dá)式用法,結(jié)合實(shí)例形式分析了Go語言基于正則實(shí)現(xiàn)查找、匹配、替換等基本操作的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-01-01
  • Go語言內(nèi)置包的使用

    Go語言內(nèi)置包的使用

    本文主要介紹了Go語言內(nèi)置包的使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Go實(shí)現(xiàn)簡單的數(shù)據(jù)庫表轉(zhuǎn)結(jié)構(gòu)體詳解

    Go實(shí)現(xiàn)簡單的數(shù)據(jù)庫表轉(zhuǎn)結(jié)構(gòu)體詳解

    這篇文章主要為大家介紹了Go實(shí)現(xiàn)簡單的數(shù)據(jù)庫表轉(zhuǎn)結(jié)構(gòu)體詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01
  • Golang 日期/時(shí)間包的使用詳解

    Golang 日期/時(shí)間包的使用詳解

    這篇文章主要介紹了Golang 日期/時(shí)間包的使用詳解,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-03-03
  • golang?gorm的Callbacks事務(wù)回滾對象操作示例

    golang?gorm的Callbacks事務(wù)回滾對象操作示例

    這篇文章主要為大家介紹了golang?gorm的Callbacks事務(wù)回滾對象操作示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04

最新評論

栖霞市| 巴彦县| 玉田县| 温泉县| 威海市| 雷山县| 江都市| 海阳市| 靖江市| 临夏市| 徐水县| 依安县| 黄陵县| 中卫市| 墨江| 曲沃县| 嘉黎县| 甘谷县| 永宁县| 南投市| 桃园市| 浪卡子县| 阳春市| 竹山县| 德兴市| 穆棱市| 巧家县| 平远县| 蒙城县| 小金县| 高唐县| 大化| 新沂市| 广西| 进贤县| 庄浪县| 运城市| 台前县| 崇信县| 互助| 枞阳县|