Gin进阶操作 | 青训营笔记

224 阅读2分钟

Gin 参数绑定

1. 什么是参数绑定

Gin 参数绑定是指将请求中的数据与结构体进行绑定,Gin 支持的参数绑定有 Query、Form、JSON、XML、ProtoBuf 等。

2. Query 参数绑定

Query 参数由查询字符串中的键值对组成,例如:/user?name=张三&age=18,Gin 可以将 Query 参数与结构体进行绑定。

package main

import "github.com/gin-gonic/gin"

type User struct {
    Name string `form:"name"`
    Age  int    `form:"age"`
}

func main() {
    r := gin.Default()
    // Query 参数绑定
    r.GET("/user", func(c *gin.Context) {
        var user User
        if err := c.ShouldBindQuery(&user); err != nil {
            c.String(200, err.Error())
            return
        }
        c.String(200, "%#v", user)
    })
    r.Run() // listen and serve on
}

3. Form 参数绑定

Form 参数由表单中的键值对组成,例如:<form action="/user" method="post"><input type="text" name="name" /><input type="text" name="age" /></form>,Gin 可以将 Form 参数与结构体进行绑定。

package main

import "github.com/gin-gonic/gin"

type User struct {
    Name string `form:"name"`
    Age  int    `form:"age"`
}

func main() {
    r := gin.Default()
    // Form 参数绑定
    r.POST("/user", func(c *gin.Context) {
        var user User
        if err := c.ShouldBind(&user); err != nil {
            c.String(200, err.Error())
            return
        }
        c.String(200, "%#v", user)
    })
    r.Run() // listen and serve on
}

4. JSON 参数绑定

JSON 是一种轻量级的数据交换格式,它基于 ECMAScript 的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。JSON 在数据交换方面有着明显的优势,它是一种理想的数据交换格式。

POST 请求中的数据可以是 JSON 格式的,Gin 可以将 JSON 数据与结构体进行绑定。

package main

import "github.com/gin-gonic/gin"

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    r := gin.Default()
    // JSON 参数绑定
    r.POST("/user", func(c *gin.Context) {
        var user User
        if err := c.ShouldBindJSON(&user); err != nil {
            c.String(200, err.Error())
            return
        }
        c.String(200, "%#v", user)
    })
    r.Run() // listen and serve on
}

Gin 数据校验

1. 什么是数据校验

数据校验是指对请求中的数据进行校验,例如:校验用户名是否为空、校验密码是否符合规则等。

2. 基本使用

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/gin-gonic/gin/binding"
    "net/http"
)

type User struct {
    Name string `form:"name" binding:"required"`
    Age  int    `form:"age" binding:"required,gt=18"`
}

func main() {
    r := gin.Default()
    // 数据校验
    r.POST("/user", func(c *gin.Context) {
        var user User
        if err := c.ShouldBindWith(&user, binding.Form); err != nil {
            c.String(http.StatusBadRequest, err.Error())
            return
        }
        c.String(http.StatusOK, "%#v", user)
    })
    r.Run() // listen and serve on
}

Gin 错误处理

1. 什么是错误处理

错误处理是指对请求中的错误进行处理,例如:请求中的数据校验失败、请求中的数据绑定失败等。

2. 基本使用

package main

import (
    "github.com/gin-gonic/gin"
    "github.com/gin-gonic/gin/binding"
    "net/http"
)

type User struct {
    Name string `form:"name" binding:"required"`
    Age  int    `form:"age" binding:"required,gt=18"`
}

func main() {
    r := gin.Default()
    // 错误处理
    r.POST("/user", func(c *gin.Context) {
        var user User
        if err := c.ShouldBindWith(&user, binding.Form); err != nil {
            c.String(http.StatusBadRequest, err.Error())
            return
        }
        c.String(http.StatusOK, "%#v", user)
    })
    r.Run() // listen and serve on
}