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

golang原生http包實現(xiàn)各種情況的get請求方式

 更新時間:2024年08月08日 14:55:43   作者:千年恨  
這篇文章主要介紹了golang原生http包實現(xiàn)各種情況的get請求方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

go http get 總結(jié)

請求地址

var (
	requestGetURLNoParams string = "http://httpbin.org/get"
	requestGetURL         string = "http://httpbin.org/get?a=a&b=b&c=ccc"
	imageURL              string = "http://httpbin.org/image"
)

普通get請求

// 基本get請求
func basicGet() {
	resp, err := http.Get(requestGetURLNoParams)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	fmt.Println(string(b))
}

請求參數(shù)放到url.Values{}

// get請求參數(shù)放到 "net/url"
func basicGetURLParams() {
	params := url.Values{}
	parseURL, err := url.Parse(requestGetURLNoParams)
	if err != nil {
		log.Println("err")
	}
	params.Set("aaa", "aaa")
	params.Set("age", "23")
	//如果參數(shù)中有中文參數(shù),這個方法會進行URLEncode
	parseURL.RawQuery = params.Encode()
	urlPathWithParams := parseURL.String()
	resp, err := http.Get(urlPathWithParams)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	fmt.Println(string(b))
}

自定義請求(添加頭、cookie)

// 可以設置請求頭 添加cookie
func basicGetHeader() {
	client := http.Client{}
	req, err := http.NewRequest(http.MethodGet, requestGetURLNoParams, nil)
	if err != nil {
		log.Println("err")
	}
	// 添加請求頭
	req.Header.Add("Content-type", "application/json;charset=utf-8")
	req.Header.Add("header", "header????")
	// 添加cookie
	cookie1 := &http.Cookie{
		Name:  "aaa",
		Value: "aaa-value",
	}
	req.AddCookie(cookie1)
	// 發(fā)送請求
	resp, err := client.Do(req)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	fmt.Println(string(b))
}

接收文件–ioutil.WriteFile

// ioutil.ReadAll(resp.Body) 先將所有的響應讀出來放到內(nèi)存中。如果文件太大,那么就會消耗很多內(nèi)存
func basicGetDownloadFile() {
	client := http.Client{}
	req, err := http.NewRequest(http.MethodGet, imageURL, nil) // strings.NewReader(data)
	if err != nil {
		log.Println("err")
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	b, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		log.Println("err")
	}
	ioutil.WriteFile("./images/img.jpg", b, 0644)
}

接收文件–io.Copy

// io.Copy() 省去了先把內(nèi)容讀取到內(nèi)存,然后將內(nèi)存中的內(nèi)容寫到文件
func basicGetDownloadFileIoCopy() {
	client := http.Client{}
	req, err := http.NewRequest(http.MethodGet, imageURL, nil)
	if err != nil {
		log.Println("err")
	}
	resp, err := client.Do(req)
	if err != nil {
		log.Println("err")
	}
	defer resp.Body.Close()

	// 創(chuàng)建一個文件用于保存
	dest, err := os.Create("./images/img.jpg")
	if err != nil {
		log.Println("err")
	}
	defer dest.Close()

	// 然后將響應流和文件流對接起來
	_, err = io.Copy(dest, resp.Body)
	if err != nil {
		log.Println("err")
	}
}

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Go 語言中程序編譯過程詳解

    Go 語言中程序編譯過程詳解

    本文旨在深入探討Go語言的編譯機制和最新的模塊管理系統(tǒng)——Go Modules,通過詳細的示例和步驟,我們將演示從簡單的 “Hello World” 程序到使用第三方庫的更復雜項目的開發(fā)過程,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • golang fmt格式“占位符”的實例用法詳解

    golang fmt格式“占位符”的實例用法詳解

    在本篇文章里小編給大家整理的是一篇關(guān)于golang fmt格式“占位符”的實例用法詳解內(nèi)容,有興趣的朋友們可以學習下。
    2021-07-07
  • go語言中切片Slice與數(shù)組Array對比以及panic:?runtime?error:?index?out?of?range問題解決

    go語言中切片Slice與數(shù)組Array對比以及panic:?runtime?error:?index?out?

    go語言中數(shù)組與其他語言有在顯著的不同,包括其不能夠進行添加,以及值拷貝的特性,下面這篇文章主要給大家介紹了關(guān)于go語言中切片Slice與數(shù)組Array對比以及panic:?runtime?error:?index?out?of?range問題解決的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 淺析Go語言容器之數(shù)組和切片的使用

    淺析Go語言容器之數(shù)組和切片的使用

    在?Java?的核心庫中,集合框架可謂鼎鼎大名:Array?、List、Set等等,隨便拎一個出來都值得開發(fā)者好好學習如何使用甚至是背后的設計源碼。雖然Go語言沒有如此豐富的容器類型,但也有一些基本的容器供開發(fā)者使用,接下來讓我們認識一下這些容器類型吧
    2022-11-11
  • go結(jié)構(gòu)體嵌套的切片數(shù)組操作

    go結(jié)構(gòu)體嵌套的切片數(shù)組操作

    這篇文章主要介紹了go結(jié)構(gòu)體嵌套的切片數(shù)組操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 深度剖析Golang如何實現(xiàn)GC掃描對象

    深度剖析Golang如何實現(xiàn)GC掃描對象

    這篇文章主要為大家詳細介紹了Golang是如何實現(xiàn)GC掃描對象的,文中的示例代碼講解詳細,具有一定的學習價值,需要的小伙伴可以參考一下
    2023-03-03
  • Golang Gob編碼(gob包的使用詳解)

    Golang Gob編碼(gob包的使用詳解)

    這篇文章主要介紹了Golang Gob編碼(gob包的使用詳解),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 深入理解go sync.Once的具體使用

    深入理解go sync.Once的具體使用

    在很多情況下,我們可能需要控制某一段代碼只執(zhí)行一次,go 為我們提供了?sync.Once?對象,它保證了某個動作只被執(zhí)行一次,本文主要介紹了深入理解go sync.Once的具體使用,感興趣的可以了解一下
    2024-01-01
  • 詳解Golang中interface{}的注意事項

    詳解Golang中interface{}的注意事項

    學習?golang?,對于?interface{}?接口類型,我們一定繞不過,這篇文章咱們就來一起來看看?使用?interface{}?的時候,都有哪些注意事項吧
    2023-03-03
  • golang中context的作用詳解

    golang中context的作用詳解

    這篇文章主要介紹了golang中context的作用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01

最新評論