golang高性能的http請求 fasthttp詳解
fasthttp是golang下的一個http框架,顧名思義,與原生的http實現(xiàn)相比,它的特點在于快,按照官網(wǎng)的說法,它的客戶端和服務(wù)端性能比原生有了十倍的提升。
它的高性能主要源自于“復(fù)用”,通過服務(wù)協(xié)程和內(nèi)存變量的復(fù)用,節(jié)省了大量資源分配的成本。
fasthttp 據(jù)說是目前golang性能最好的http庫,相對于自帶的net/http,性能說是有10倍的提升,具體介紹可以看看官方介紹:valyala/fasthttp
1,首先安裝fasthttp
go get -u github.com/valyala/fasthttp
2,簡單的一個get請求
package main import ( "github.com/valyala/fasthttp" ) func main() { url := `http://httpbin.org/get` status, resp, err := fasthttp.Get(nil, url) if err != nil { fmt.Println("請求失敗:", err.Error()) return } if status != fasthttp.StatusOK { fmt.Println("請求沒有成功:", status) return } fmt.Println(string(resp)) }
2,簡單的Post請求
func main() { url := `http://httpbin.org/post?key=123` // 填充表單,類似于net/url args := &fasthttp.Args{} args.Add("name", "test") args.Add("age", "18") status, resp, err := fasthttp.Post(nil, url, args) if err != nil { fmt.Println("請求失敗:", err.Error()) return } if status != fasthttp.StatusOK { fmt.Println("請求沒有成功:", status) return } fmt.Println(string(resp)) }
比如有些API服務(wù)需要我們提供json body或者xml body也就是,Content-Type是application/json、application/xml或者其他類型
func main() { url := `http://httpbin.org/post?key=123` req := &fasthttp.Request{} req.SetRequestURI(url) requestBody := []byte(`{"request":"test"}`) req.SetBody(requestBody) // 默認是application/x-www-form-urlencoded req.Header.SetContentType("application/json") req.Header.SetMethod("POST") resp := &fasthttp.Response{} client := &fasthttp.Client{} if err := client.Do(req, resp);err != nil { fmt.Println("請求失敗:", err.Error()) return } b := resp.Body() fmt.Println("result:\r\n", string(b)) }
翻閱文檔發(fā)現(xiàn)了他提供了幾個方法:AcquireRequest()
、AcquireResponse()
,而且也推薦了在有性能要求的代碼中,通過 AcquireRequest 和 AcquireResponse 來獲取 req 和 resp。
func main() { url := `http://httpbin.org/post?key=123` req := fasthttp.AcquireRequest() defer fasthttp.ReleaseRequest(req) // 用完需要釋放資源 // 默認是application/x-www-form-urlencoded req.Header.SetContentType("application/json") req.Header.SetMethod("POST") req.SetRequestURI(url) requestBody := []byte(`{"request":"test"}`) req.SetBody(requestBody) resp := fasthttp.AcquireResponse() defer fasthttp.ReleaseResponse(resp) // 用完需要釋放資源 if err := fasthttp.Do(req, resp); err != nil { fmt.Println("請求失敗:", err.Error()) return } b := resp.Body() fmt.Println("result:\r\n", string(b)) }
到此這篇關(guān)于golang高性能的http請求 fasthttp的文章就介紹到這了,更多相關(guān)golang fasthttp http請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go?WEB框架使用攔截器驗證用戶登錄狀態(tài)實現(xiàn)
這篇文章主要為大家介紹了Go?WEB框架使用攔截器驗證用戶登錄狀態(tài)實現(xiàn),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07