go語(yǔ)言fasthttp使用實(shí)例小結(jié)
一、服務(wù)搭建和接收參數(shù)實(shí)例
package main import ( "fmt" "github.com/buaazp/fasthttprouter" "github.com/valyala/fasthttp" ) // index 頁(yè) func Index(ctx *fasthttp.RequestCtx) { ctx.Request.Header.Peek("userid")//獲取header頭參數(shù) fmt.Fprint(ctx, "Welcome") } // 簡(jiǎn)單路由頁(yè) func Hello(ctx *fasthttp.RequestCtx) { name:= ctx.UserValue("name").(string) //獲取路由參數(shù)name fmt.Fprintf(ctx, "hello") } // 獲取GET請(qǐng)求json數(shù)據(jù) func TestGet(ctx *fasthttp.RequestCtx) { values := ctx.QueryArgs() // 使用 ctx.QueryArgs() 方法 fmt.Fprint(ctx, string(values.Peek("abc"))) // 不加string返回的byte數(shù)組 fmt.Fprint(ctx, string(ctx.FormValue("abc"))) // 獲取表單數(shù)據(jù) } // 獲取post的請(qǐng)求json數(shù)據(jù) func TestPost(ctx *fasthttp.RequestCtx) { postBody := ctx.PostBody() // 這兩行可以獲取PostBody數(shù)據(jù),文件上傳也有用 fmt.Fprint(ctx, string(postBody)) fmt.Fprint(ctx, string(ctx.FormValue("abc"))) // 獲取表單數(shù)據(jù) } func main() { // 創(chuàng)建路由 router := fasthttprouter.New() // 不同的路由執(zhí)行不同的處理函數(shù) router.GET("/", Index) router.GET("/hello/:name", Hello) router.GET("/get", TestGet) // post方法 router.POST("/post", TestPost) // 啟動(dòng)web服務(wù)器,監(jiān)聽(tīng) 0.0.0.0:80 log.Fatal(fasthttp.ListenAndServe(":08", router.Handler)) }
二、Post和Get請(qǐng)求實(shí)例
package main import ( "fmt" "github.com/valyala/fasthttp" ) func main() { req := &fasthttp.Request{} //相當(dāng)于獲取一個(gè)對(duì)象 req.SetRequestURI("www.baidu.com")//設(shè)置請(qǐng)求的url bytes, err := json.Marshal(data)//data是請(qǐng)求數(shù)據(jù) if err != nil { return nil, err } req.SetBody(bytes)//存儲(chǔ)轉(zhuǎn)換好的數(shù)據(jù) req.Header.SetContentType("application/json")//設(shè)置header頭信息 req.Header.SetMethod(method)//設(shè)置請(qǐng)求方法 resp := &fasthttp.Response{}//相應(yīng)結(jié)果的對(duì)象 client := &fasthttp.Client{}//發(fā)起請(qǐng)求的對(duì)象 if err := client.Do(req, resp); err != nil { return nil, err } var param model.Data //定義好的結(jié)構(gòu)體用來(lái)存放相應(yīng)數(shù)據(jù) err = json.Unmarshal(resp.Body(), ¶m) if err != nil { return nil, err } return param, nil }
到此這篇關(guān)于go語(yǔ)言fasthttp使用實(shí)例的文章就介紹到這了,更多相關(guān)Go fasthttp內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
幾個(gè)小技巧幫你實(shí)現(xiàn)Golang永久阻塞
Go 的運(yùn)行時(shí)的當(dāng)前設(shè)計(jì),假定程序員自己負(fù)責(zé)檢測(cè)何時(shí)終止一個(gè) goroutine 以及何時(shí)終止該程序。有時(shí)候我們需要的是使程序阻塞在這一行,本文就來(lái)詳細(xì)的介紹一下,感興趣的可以了解一下2021-12-12在Go中動(dòng)態(tài)替換SQL查詢中的日期參數(shù)的完整步驟
在處理數(shù)據(jù)庫(kù)查詢時(shí),經(jīng)常需要根據(jù)不同的輸入條件動(dòng)態(tài)地構(gòu)造SQL語(yǔ)句,尤其是在涉及日期范圍的查詢中,能夠根據(jù)實(shí)際需求調(diào)整查詢的起始和結(jié)束日期顯得尤為重要,在本文中,我將介紹如何在Go語(yǔ)言中實(shí)現(xiàn)動(dòng)態(tài)替換SQL查詢中的日期參數(shù),需要的朋友可以參考下2024-11-11Go語(yǔ)言設(shè)計(jì)模式之結(jié)構(gòu)型模式
本文主要聚焦在結(jié)構(gòu)型模式(Structural Pattern)上,其主要思想是將多個(gè)對(duì)象組裝成較大的結(jié)構(gòu),并同時(shí)保持結(jié)構(gòu)的靈活和高效,從程序的結(jié)構(gòu)上解決模塊之間的耦合問(wèn)題2021-06-06詳解Go語(yǔ)言如何利用高階函數(shù)寫出優(yōu)雅的代碼
高階函數(shù)(Hiher-order?Function)定義為:滿足下列條件之一的函數(shù):接收一個(gè)或多個(gè)函數(shù)作為參數(shù);返回值是一個(gè)函數(shù)。本文為大家介紹了如何利用高階函數(shù)寫出優(yōu)雅的代碼,希望對(duì)大家有所幫助2023-01-01詳解golang開(kāi)發(fā)中http請(qǐng)求redirect的問(wèn)題
這篇文章主要介紹了詳解golang開(kāi)發(fā)中http請(qǐng)求redirect的問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10Golang創(chuàng)建構(gòu)造函數(shù)的方法超詳細(xì)講解
構(gòu)造器一般面向?qū)ο笳Z(yǔ)言的典型特性,用于初始化變量。Go語(yǔ)言沒(méi)有任何具體構(gòu)造器,但我們能使用該特性去初始化變量。本文介紹不同類型構(gòu)造器的差異及其應(yīng)用場(chǎng)景2023-01-01