詳解Go語言中Get/Post請求測試
基礎(chǔ)語法差不多了,需要開始實踐到一下項目,先來web框架gin吧,做一個后端web服務(wù)。
在把項目搭建起來的過程中,我也要結(jié)合實際的工作經(jīng)驗,補充一些項目結(jié)構(gòu)、開發(fā)組件上的理解。
項目地址:github地址
gin安裝
先將gin安裝一下,安裝依賴go語言還是比較方便的。
在安裝之前先配置一下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請求測試
實現(xiàn)一個web服務(wù)還是比較簡單的,創(chuàng)建一個router,綁定路由規(guī)則即可。先測試幾個Get請求。
樣例代碼如下:
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
測試一下,這里我是用的接口測試工具為ApiPost



注意
1、在使用context.DefaultQuery方法的時候,可以提供一個默認值。
2、除了可以使用":"來獲取路徑參數(shù)外,可以使用"*",可以匹配更多規(guī)則。我個人感覺我不會這么用get請求參數(shù)。
Post請求測試
Post請求是在項目中使用的比較多的,而且不管是使用form獲取參數(shù)還是body,都十分常見。
同時返回的數(shù)據(jù)也不可能使用一行字符串,實際項目中還是使用json格式居多。
所以下面我使用form參數(shù)和body參數(shù)實現(xiàn)了一下post測試接口。
完成代碼如下
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)體對象
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")
}測試一下testPost和testPost2接口


注意
1、使用context.DefaultPostForm方法可以提供一個默認值。
2、可以使用gin.H方法構(gòu)造json結(jié)構(gòu)返回。
3、將獲得打參數(shù)反序列化為結(jié)構(gòu)體,這部分的代碼使用到之前講json解析的筆記。
到此這篇關(guān)于詳解Go語言中Get/Post請求測試的文章就介紹到這了,更多相關(guān)Go語言 Get Post請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang實現(xiàn)頁面靜態(tài)化操作的示例代碼
這篇文章主要介紹了golang實現(xiàn)頁面靜態(tài)化操作的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧2020-02-02
golang使用泛型結(jié)構(gòu)體實現(xiàn)封裝切片
這篇文章主要為大家詳細介紹了golang使用泛型結(jié)構(gòu)體實現(xiàn)封裝切片,即封裝切片的增、刪、改、查、長度大小、ForEach(遍歷切片),感興趣的小伙伴可以學(xué)習一下2023-10-10
Go語言服務(wù)器開發(fā)實現(xiàn)最簡單HTTP的GET與POST接口
這篇文章主要介紹了Go語言服務(wù)器開發(fā)實現(xiàn)最簡單HTTP的GET與POST接口,實例分析了Go語言http包的使用技巧,需要的朋友可以參考下2015-02-02
Go 語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習教程
這篇文章主要為大家介紹了Go 語言數(shù)據(jù)結(jié)構(gòu)之雙鏈表學(xué)習教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
Go編寫定時器與定時任務(wù)詳解(附第三方庫gocron用法)
當需要每天執(zhí)行定時任務(wù)的時候就需要定時器來處理了,周期任務(wù),倒計時任務(wù),定點任務(wù)等,下面這篇文章主要給大家介紹了關(guān)于Go編寫定時器與定時任務(wù)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07

