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 @   99号的格调  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示