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

詳解Go語言如何進行Http調用

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

前言

無論是微服務還是單體架構等,服務間都有相互通信的時候,而最直接的通信方法就是 HTTP 調用,本文將會介紹在 Go 語言里,如何進行 HTTP 調用,并舉例說明。

前置知識

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

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

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

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

通過 client.Do(req) 方法調用之后,返回值有 (*Response, error),第一個是響應結構體參數(shù),第二個是錯誤參數(shù)。通過讀取 Responsebody 的值,可以獲取接口的響應體。

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 結構體的 Header 字段的 set 方法或 add 方法進行設置。
  • HTTP 請求響應碼可以通過 ResponseStatusCode 字段進行查看。
  • 接口請求成功之后,通過 io.ReadAll 方法,讀取 resp.Body 響應體信息。
  • 除了直接在 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 結構體的 set 方法設置 query參數(shù),url 通過 url.Parse 函數(shù)生成一個 URL 結構體指針變量,rawUrl.RawQuery = params.Encode() 通過這行代碼將 query 參數(shù)和 url 進行綁定,最后通過 String() 方法將 url 轉換成 string 類型。

小結

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

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

相關文章

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

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

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

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

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

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

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

    GoLang unsafe包詳細講解

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

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

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

    Go語言正則表達式用法實例小結【查找、匹配、替換等】

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

    Go語言內置包的使用

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

    Go實現(xiàn)簡單的數(shù)據(jù)庫表轉結構體詳解

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

    Golang 日期/時間包的使用詳解

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

    golang?gorm的Callbacks事務回滾對象操作示例

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

最新評論

山阴县| 溧水县| 延寿县| 西城区| 万盛区| 永和县| 广州市| 伊宁市| 沂源县| 屏东县| 绩溪县| 德州市| 兴宁市| 苍溪县| 大竹县| 新竹县| 淳化县| 辽阳市| 抚州市| 崇义县| 安平县| 普陀区| 乌兰浩特市| 酉阳| 航空| 抚顺市| 石家庄市| 河西区| 苏尼特左旗| 嘉鱼县| 屯门区| 永昌县| 敦煌市| 安泽县| 工布江达县| 建昌县| 南投市| 邹城市| 古浪县| 佛教| 靖西县|