文章目錄
- Gin快速搭建一個web服務
- Gin數據交互JSON串內容規范
- Gin使用結構體返回數據給前端
- Gin配置POST類型的路由
- Gin獲取GET請求參數
- Gin獲取POST請求參數-form-data類型
- Gin獲取POST請求參數-JSON類型
- Gin獲取參數綁定至結構體
Gin快速搭建一個web服務
- 下載包
\\新建一個文件,文件名gitstudy,然后右擊使用vscode打開,初始化目錄,并下載包
go mod init ginstudy
go get -u github.com/gin-gonic/gin
- 新建main.go
package mainimport ("net/http""github.com/gin-gonic/gin"
)func main() {//1. 創建一個路由引擎,之后可以在路由引擎中添加一些路由和路由處理邏輯r := gin.Default()//2. 添加路由到路由引擎,以及指定該路由的處理邏輯// GET("該路由的路徑,處理該路由的邏輯")r.GET("/ping", func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"message": "pong",})})r.GET("/", func(c *gin.Context) {//c.String//http.StatusOk, 就是狀態碼200,http這個包定義了相關狀態碼別名,直接調用就好c.String(http.StatusOK, "你在訪問首頁")})//3. 啟動gin服務r.Run() // 默認監聽8080,可以修改其他端口,r.Run(:8081)
}
Gin數據交互JSON串內容規范
- 用獨立函數返回json串的寫法
// 定義一個函數,用于gin處理相關請求的邏輯,并返回json數據
func getUserInfo(c *gin.Context) {c.JSON(http.StatusOK, gin.H{"name": "馬云","age": 18,"address": "杭州",})
}//使用獨立的函數處理邏輯r.GET("/api/user/info", getUserInfo)
瀏覽器訪問
- 前后端分離時,返回j給前端json串常用的格式,這是相對標準的格式,可以給前端返回數據都按這個格式
/*{"status": 200, //請求已經收到,后端處理返回給前端狀態碼,命名自定義code、statusCode"message": "查詢成功""data": {"name": "馬云","age": "18","address": "杭州",}}*/
Gin使用結構體返回數據給前端
type UserInfo struct {Username string `json:"username"`Age int `json:"age"`Address string `json:"address"`
}type RetrunData struct {Status int `json:"status"`Message string `json:"message"`Data UserInfo `json:"data"`
}func retrunDataWithStruct(c *gin.Context) {UserInfo := UserInfo{Username: "馬云",Age: 18,Address: "杭州",}RetrunData := RetrunData{Status: 200,Message: "用戶信息查詢",Data: UserInfo,}c.JSON(http.StatusOK, RetrunData)
}r.GET("/api/usr/infoWithSturct", retrunDataWithStruct)
Gin配置POST類型的路由
跟get配置基本一樣,只是訪問的需要postman使用post請求
func addUser(c *gin.Context) {RetrunData := RetrunData{Status: 200,Message: "創建成功",}c.JSON(http.StatusOK, RetrunData)
}r.POST("/api/user/add", addUser)
Gin獲取GET請求參數
參數是什么?就是url 問號后面的字段。?articleId=149418888,多個參數使用&符號分隔
例如:https://editor.csdn.net/md/?articleId=149418888&username=admin
1.配置接收參數
//接受參數u := c.Query("username") //u := c.DefaultQuery("username","小馬")id, _ := strconv.Atoi(c.Query("id"))//去數據庫中查詢該用戶信息fmt.Printf("拿到用戶名:%s, ID:%d\n", u, id)
-
發送帶參數請求
-
查看參數是否已接收到
Gin獲取POST請求參數-form-data類型
// POST數據提交格式有兩種:
// JSON {}
// from-data 表單,數據量比較小使用,兩種方法都有用到func addUser(c *gin.Context) {// POST獲取請求參數//from-data獲取請求參數u := c.PostForm("username")age, _ := strconv.Atoi(c.PostForm("age"))//address := c.PostForm("address")address := c.DefaultPostForm("address", "北京") //如果請求里沒有這個key,就使用默認值,如果傳有這個key就以你的配置為準UserInfo := UserInfo{Username: u,Age: age,Address: address,}RetrunData := RetrunData{Status: 200,Message: "創建成功",Data: UserInfo,}c.JSON(http.StatusOK, RetrunData)
}
Gin獲取POST請求參數-JSON類型
func addUserByJson(c *gin.Context) {// POST獲取請求參數// JSON接受參數jsonData, _ := c.GetRawData()//拿到json串之后,也有兩種處理。//1.轉成一個mapvar m map[string]interface{}json.Unmarshal(jsonData, &m)c.JSON(http.StatusOK, m)}
Gin獲取參數綁定至結構體
//模型綁定
// 可以把請求的數據直接綁定到結構體 // 常用
// JSON接受參數,并且綁定到結構體func addUserBindStuct(c *gin.Context) {UserInfo := UserInfo{}if err := c.ShouldBindJSON(&UserInfo); err != nil {// 說明綁定失敗fmt.Println("數據綁定失敗", err.Error())c.JSON(http.StatusOK, gin.H{"message": "參數格式不正確","status": 500,})} else {c.JSON(http.StatusOK, UserInfo)}}