欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解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ù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Go?不支持?[]T轉換為[]interface類型詳解

    Go?不支持?[]T轉換為[]interface類型詳解

    這篇文章主要為大家介紹了Go不支持[]T轉換為[]interface類型詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • 一文詳解Golang中的切片數(shù)據(jù)類型

    一文詳解Golang中的切片數(shù)據(jù)類型

    這篇文章主要介紹了一文詳解Golang中的切片數(shù)據(jù)類型,切片是一個種特殊的數(shù)組。是對數(shù)組的一個連續(xù)片段的引用,所以切片是一個引用類型
    2022-09-09
  • golang開發(fā)及數(shù)字證書研究分享

    golang開發(fā)及數(shù)字證書研究分享

    這篇文章主要為大家介紹了golang開發(fā)以及數(shù)字證書的研究示例分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • go如何優(yōu)雅關閉Graceful?Shutdown服務

    go如何優(yōu)雅關閉Graceful?Shutdown服務

    這篇文章主要為大家介紹了go優(yōu)雅關閉Graceful?Shutdown服務詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Go語言學習教程之goroutine和通道的示例詳解

    Go語言學習教程之goroutine和通道的示例詳解

    這篇文章主要通過A?Tour?of?Go中的例子進行學習,以此了解Go語言中的goroutine和通道,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-09-09
  • golang使用jaeger進行鏈路追蹤

    golang使用jaeger進行鏈路追蹤

    鏈路追蹤是指在分布式系統(tǒng)中,將一次請求的處理過程進行記錄并聚合展示的一種方法,目的是將一次分布式請求的調用情況集中在一處展示,本文將介紹golang如何使用jaeger進行鏈路追蹤,需要的朋友可以參考下
    2024-06-06
  • golang如何用type-switch判斷interface變量的實際存儲類型

    golang如何用type-switch判斷interface變量的實際存儲類型

    這篇文章主要介紹了golang如何用type-switch判斷interface變量的實際存儲類型,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • golang獲取客戶端ip的實現(xiàn)

    golang獲取客戶端ip的實現(xiàn)

    本文主要介紹了golang獲取客戶端ip的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • go?語言爬蟲庫goquery的具體使用

    go?語言爬蟲庫goquery的具體使用

    GoQuery是專為Go語言設計的一個強大的HTML解析和查詢庫,本文主要介紹了go語言爬蟲庫goquery的具體使用,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Go-Web框架中AOP方案的實現(xiàn)方式

    Go-Web框架中AOP方案的實現(xiàn)方式

    本文主要介紹了Go-Web框架中AOP方案的實現(xiàn)方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06

最新評論