golang高性能的http请求|golang高性能的http请求 fasthttp详解
fasthttp是golang下的一个http框架,顾名思义,与原生的http实现相比,它的特点在于快,按照官网的说法,它的客户端和服务端性能比原生有了十倍的提升。
它的高性能主要源自于“复用”,通过服务协程和内存变量的复用,节省了大量资源分配的成本。
【golang高性能的http请求|golang高性能的http请求 fasthttp详解】fasthttp 据说是目前golang性能最好的http库,相对于自带的net/http,性能说是有10倍的提升,具体介绍可以看看官方介绍:valyala/fasthttp
1,首先安装fasthttp
go get -u github.com/valyala/fasthttp
2,简单的一个get请求
package mainimport ("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/urlargs := &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服务需要我们提供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-urlencodedreq.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))}
翻阅文档发现了他提供了几个方法:
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-urlencodedreq.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))}
到此这篇关于golang高性能的http请求 fasthttp的文章就介绍到这了,更多相关golang fasthttp http请求内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量