gin - request data bind

gin请求数据绑定至结构体
form表单数据绑定结构体

var b struct
c.Bind(&b)

package main

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

/**
gin数据绑定:
form表单数据绑定到结构体
 */
type StructA struct {
   FieldA string `form:"field_a"`
}

type StructB struct {
   NestedStruct StructA
   FieldB string `form:"field_b"`
}

type StructC struct {
   NestedStructPointer *StructA
   FieldC string `form:"field_c"`
}

type StructD struct {
   NestedAnonyStruct struct {
    FieldX string `form:"field_x"`
   }
   FieldD string `form:"field_d"`
}

func GetDataB(c *gin.Context) {
   var b StructB
   c.Bind(&b)
   c.JSON(200, gin.H{
    "a": b.NestedStruct,
    "b": b.FieldB,
   })
}

func GetDataC(c *gin.Context) {
   var b StructC
   c.Bind(&b)
   c.JSON(200, gin.H{
    "a": b.NestedStructPointer,
    "c": b.FieldC,
   })
}

func GetDataD(c *gin.Context) {
   var b StructD
   c.Bind(&b)
   c.JSON(200, gin.H{
    "x": b.NestedAnonyStruct,
    "d": b.FieldD,
   })
}

func main() {
   r := gin.Default()
   //request: http://localhost:8080/getb?field_a=hello&field_b=world
   //result: {"a":{"FieldA":"hello"},"b":"world"}
   r.GET("/getb", GetDataB)

   //request: http://localhost:8080/getc?field_a=hello&field_c=world
   //result: {"a":{"FieldA":"hello"},"c":"world"}
   r.GET("/getc", GetDataC)

   //request: http://localhost:8080/getd?field_x=hello&field_d=world
   //result: {"d":"world","x":{"FieldX":"hello"}}
   r.GET("/getd", GetDataD)
   r.Run()
}
checkbox复选框数据绑定结构体

var b struct
c.ShouldBind(&b)

main.go

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
type myForm struct {
	Colors []string `form:"color[]"`
}
func formHandler(c *gin.Context){
	var f myForm
	c.ShouldBind(&f)
	c.JSON(http.StatusOK,gin.H{
		"color":f.Colors,
	})
}
func Index(c *gin.Context){
	c.HTML(http.StatusOK,"index.html",nil)
}
func main(){
	r := gin.Default()
	//全局加载模板路径
	r.LoadHTMLGlob("*")
	r.GET("/",Index)
	r.POST("/commit",formHandler)
	r.Run()
}

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>checkbox多数据绑定</title>
</head>
<body>
    <form method="post" action="/commit">
        red:<input type="checkbox" name="color[]" value="red"/><br>
        green:<input type="checkbox" name="color[]" value="green"/><br>
        blue:<input type="checkbox" name="color[]" value="blue"/><br>
        yellow:<input type="checkbox" name="color[]" value="yellow"/><br>
        <input type="submit" value="commit"/>
    </form>
</body>
</html>
get,post请求数据绑定

c.BindQuery(&user)
c.BindJSON(&user)

package main

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

/**
Bind query string or post data
get,post请求数据绑定
 */

type User struct {
	Username string `form:"username" json:"username"`
	Age int `form:"age" json:"age"`
	Birthday time.Time `form:"birthday" time_format:"2006-01-02" time_utc:"1" json:"birthday"`
}
func handlerGet(c *gin.Context){
	var user User
	err := c.BindQuery(&user)
	if err==nil {
		c.JSON(http.StatusOK,user)
	}else {
		c.String(http.StatusBadRequest,"绑定失败"+err.Error())
	}
}
func handlerPost(c *gin.Context){
	var user User
	err := c.BindJSON(&user)
	if err==nil {
		c.JSON(http.StatusOK,user)
	}else {
		c.String(http.StatusBadRequest,"绑定失败"+err.Error())
	}
}
func main(){
	r := gin.Default()
	//request : http://localhost:8080/get?username=ztind&age=18&birthday=1999-10-10
	//result:  {"Username":"ztind","Age":18,"Birthday":"1999-10-10T00:00:00Z"}
	r.GET("/get",handlerGet)

	r.POST("/post",handlerPost)
	r.Run()
}

GET:

request:http://localhost:8080/get?username=ztind&age=18&birthday=1999-10-10
result:
{"username":"jimmy","age":18,"birthday":"1999-10-10T00:00:00Z"}

POST:http://localhost:8080/post
request body:
注意:time.Time类型字段需拼接一个_str才能成功
https://studygolang.com/topics/9960/comment/36455

{
  "username":"ztind",
  "age":18,
  "birthday_str":"2015-01-15" 
}
uri绑定

c.ShouldBindUri(&person)
binding:“required” 此字段必填
binding:“required,uuid” 此字段必填且uuid类型

package main

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

/**
绑定uri:统一资源标识符
 */

type Person struct {
	ID string `uri:"id" binding:"required,uuid"`
	Name string `uri:"name" binding:"required"`
}

func main(){
	r:=gin.Default()
	r.GET("/:name/:id", func(c *gin.Context) {
		var person Person
		if err:=c.ShouldBindUri(&person);err!=nil{
			c.JSON(http.StatusBadRequest,gin.H{"msg":err})
			return
		}
		c.JSON(http.StatusOK,person)
	})
	r.Run()
}

测试:

localhost:8080/thinkerou/987fbc97-4bed-5078-9f07-9141ba07c9f3
localhost:8080/thinkerou/not-uuid
gin-admin-api是一个基于Gin框架开发的后台管理系统的API接口。Gin框架是一个轻量级的、高性能的Go语言框架,具有路由和中间件的功能,适合用于构建Web应用程序。 gin-admin-api提供了一套完善的API接口,用于实现后台管理系统的各种功能,例如用户管理、角色管理、权限管理、菜单管理、日志管理等。通过这些接口,可以方便地进行用户的注册、登录和认证,管理用户的角色和权限,管理系统的菜单和日志信息。 gin-admin-api的优点之一是高性能。由于采用了Gin框架,它具有快速的路由匹配和中间件处理的能力,能够处理大量的请求,并在高并发的情况下保持稳定性和可靠性。 另一个优点是易于扩展和定制。gin-admin-api使用了模块化的设计,各个功能模块之间松耦合,可以根据实际需求进行灵活的扩展和定制。例如,可以根据业务需求添加新的功能模块,或者修改和优化已有的模块。 此外,gin-admin-api还提供了友好的文档和示例代码,方便开发者理解和使用。它的源代码也是开源的,可以在GitHub上找到,这样可以方便地进行二次开发和定制,满足特定的业务需求。 总之,gin-admin-api是一个功能丰富、高性能、易扩展的后台管理系统API接口,大大简化了后台管理系统的开发工作,帮助开发者快速构建稳定、可靠的后台管理系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值