詳解Go語(yǔ)言中Get/Post請(qǐng)求測(cè)試
基礎(chǔ)語(yǔ)法差不多了,需要開(kāi)始實(shí)踐到一下項(xiàng)目,先來(lái)web框架gin吧,做一個(gè)后端web服務(wù)。
在把項(xiàng)目搭建起來(lái)的過(guò)程中,我也要結(jié)合實(shí)際的工作經(jīng)驗(yàn),補(bǔ)充一些項(xiàng)目結(jié)構(gòu)、開(kāi)發(fā)組件上的理解。
項(xiàng)目地址:github地址
gin安裝
先將gin安裝一下,安裝依賴go語(yǔ)言還是比較方便的。
在安裝之前先配置一下goproxy。
命令如下:
go env -w GO111MODULE=on go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/ //阿里代理 go env -w GOPROXY=https://goproxy.cn //七牛云代理
安裝一下gin,命令如下:
go get github.com/gin-gonic/gin
Get請(qǐng)求測(cè)試
實(shí)現(xiàn)一個(gè)web服務(wù)還是比較簡(jiǎn)單的,創(chuàng)建一個(gè)router,綁定路由規(guī)則即可。先測(cè)試幾個(gè)Get請(qǐng)求。
樣例代碼如下:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
router := gin.Default()
router.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "hello world")
})
router.GET("/test/:name", func(context *gin.Context) {
name := context.Param("name")
context.String(http.StatusOK, "check param %s", name)
})
router.GET("/test1", func(context *gin.Context) {
name := context.DefaultQuery("name", "張三")
gender := context.Query("gender")
context.String(http.StatusOK, "他叫%s,性別:%s", name, gender)
})
router.Run(":8080")
}執(zhí)行結(jié)果
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET / --> main.main.func1 (3 handlers)
[GIN-debug] GET /test/:name --> main.main.func2 (3 handlers)
[GIN-debug] GET /test1 --> main.main.func3 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend yo
u to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-
proxies for details.
[GIN-debug] Listening and serving HTTP on :8080
測(cè)試一下,這里我是用的接口測(cè)試工具為ApiPost



注意
1、在使用context.DefaultQuery方法的時(shí)候,可以提供一個(gè)默認(rèn)值。
2、除了可以使用":"來(lái)獲取路徑參數(shù)外,可以使用"*",可以匹配更多規(guī)則。我個(gè)人感覺(jué)我不會(huì)這么用get請(qǐng)求參數(shù)。
Post請(qǐng)求測(cè)試
Post請(qǐng)求是在項(xiàng)目中使用的比較多的,而且不管是使用form獲取參數(shù)還是body,都十分常見(jiàn)。
同時(shí)返回的數(shù)據(jù)也不可能使用一行字符串,實(shí)際項(xiàng)目中還是使用json格式居多。
所以下面我使用form參數(shù)和body參數(shù)實(shí)現(xiàn)了一下post測(cè)試接口。
完成代碼如下
package main
import (
"encoding/json"
"fmt"
"github.com/gin-gonic/gin"
"io/ioutil"
"net/http"
)
type Result struct {
Name string `json:"name"`
Age int `json:"age"`
}
//反序列化為結(jié)構(gòu)體對(duì)象
func parseJson(a string) Result {
fmt.Printf("原始字符串: %s\n", a)
var c Result
if err := json.Unmarshal([]byte(a), &c); err != nil {
fmt.Println("Error =", err)
return c
}
return c
}
func main() {
router := gin.Default()
router.GET("/", func(context *gin.Context) {
context.String(http.StatusOK, "hello world")
})
router.GET("/test/:name", func(context *gin.Context) {
name := context.Param("name")
context.String(http.StatusOK, "check param %s", name)
})
router.GET("/test1", func(context *gin.Context) {
name := context.DefaultQuery("name", "張三")
gender := context.Query("gender")
context.String(http.StatusOK, "他叫%s,性別:%s", name, gender)
})
router.POST("/testPost", func(context *gin.Context) {
name := context.PostForm("name")
nick := context.DefaultPostForm("nick", "leo")
context.JSON(http.StatusOK, gin.H{
"status": gin.H{
"code": http.StatusOK,
"success": true,
},
"name": name,
"nick": nick,
})
})
router.POST("/testPost2", func(context *gin.Context) {
data, _ := ioutil.ReadAll(context.Request.Body)
fmt.Println(string(data))
context.JSON(http.StatusOK, gin.H{
"code": http.StatusOK,
"data": parseJson(string(data)),
})
})
router.Run(":8080")
}測(cè)試一下testPost和testPost2接口


注意
1、使用context.DefaultPostForm方法可以提供一個(gè)默認(rèn)值。
2、可以使用gin.H方法構(gòu)造json結(jié)構(gòu)返回。
3、將獲得打參數(shù)反序列化為結(jié)構(gòu)體,這部分的代碼使用到之前講json解析的筆記。
到此這篇關(guān)于詳解Go語(yǔ)言中Get/Post請(qǐng)求測(cè)試的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 Get Post請(qǐng)求內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Go語(yǔ)言中reflect.DeepEqual函數(shù)的具體使用
本文主要介紹了Go語(yǔ)言中reflect.DeepEqual函數(shù)的具體使用,reflect.DeepEqual()函數(shù)是用來(lái)比較兩個(gè)值是否相等的方法,下面就來(lái)介紹一下,感興趣的可以了解一下2024-08-08
Golang通過(guò)SSH執(zhí)行交換機(jī)操作實(shí)現(xiàn)
這篇文章主要介紹了Golang通過(guò)SSH執(zhí)行交換機(jī)操作實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Go框架三件套Gorm?Kitex?Hertz基本用法與常見(jiàn)API講解
這篇文章主要為大家介紹了Go框架三件套Gorm?Kitex?Hertz的基本用法與常見(jiàn)API講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-02-02
golang利用unsafe操作未導(dǎo)出變量-Pointer使用詳解
這篇文章主要給大家介紹了關(guān)于golang利用unsafe操作未導(dǎo)出變量-Pointer使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-08-08
jenkins配置golang?代碼工程自動(dòng)發(fā)布的實(shí)現(xiàn)方法
這篇文章主要介紹了jenkins配置golang?代碼工程自動(dòng)發(fā)布,jks是個(gè)很好的工具,使用方法也很多,我只用了它簡(jiǎn)單的功能,對(duì)jenkins配置golang相關(guān)知識(shí)感興趣的朋友一起看看吧2022-07-07

