Gin学习笔记--请求参数绑定与多数据格式处理

使用context.PostForm和context.DefaultPostFrom获取客户端表单提交的数据。但是如果表单数据较多时,使用这两者开发速率较慢。

 表单实体绑定

使用PostForm这种单个获取属性和字段的方式,代码量较多,需要一个一个属性进行获取,而表单数据的提交,往往对应着完整的数据结构体定义,其中对应着表单的输入项。

gin框架提供了数据结构体和表单提交数据绑定的功能,提高表单数据获取的效率。

以一个用户注册功能为例,来说明表单实体绑定操i做。用户注册需要提交表单数据,假设注册时需要包含三项:username,possword,phone

POST

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "log"
)

func main() {
    engine := gin.Default()
    engine.POST("/reg", func(ctx *gin.Context) {
        fmt.Println(ctx.FullPath())
        var register Register
        err := ctx.ShouldBind(&register)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(register.UserName)
        fmt.Println(register.Phone)
        ctx.Writer.Write([]byte(register.UserName))
    })
    engine.Run()
}

type Register struct {
    UserName string `form:"name"`
    Phone    string `form:"phone"`
    PossWord string `form:"possword"`
}

GET

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "log"
)

func main() {
    engine := gin.Default()
    //http://localhost:8080/hello?name=kol&class=softengine
    engine.GET("/hello", func(ctx *gin.Context) {
        fmt.Println(ctx.FullPath())
        var student Student
        err := ctx.ShouldBindQuery(&student)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println(student.Name)
        fmt.Println(student.Classes)
        ctx.Writer.Write([]byte("hello," + student.Name))
    })
    engine.Run()
}

type Student struct {
    Name    string `form:"name"`
    Classes string `form:"classes"`
}
package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "log"
)

func main() {
    engine := gin.Default()

    engine.POST("/addstudent", func(ctx *gin.Context) {
        fmt.Println(ctx.FullPath())
        var person Person
        err := ctx.BindJSON(&person)
        if err != nil {
            log.Fatal(err)
        }
        fmt.Println("姓名:", person.Name)
        fmt.Println("性别:", person.Sex)
        ctx.Writer.Write([]byte("添加记录" + person.Name))
    })
    engine.Run()
}

type Person struct {
    Name string `form:"name"`
    Sex  string `form:"sex"`
    Age  int    `form:"age"`
}

 

posted @ 2023-03-10 22:16  99号的格调  阅读(46)  评论(0编辑  收藏  举报