gin 结构体struct使用

目标

  • 演示结构体,结构体嵌套。

  • 将表单请求数据绑定到指定结构体。

  • 分别演示表单,json , xml的数据绑定

结构体嵌套以及表单绑定

新建文件gin_struct.go

package main

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

// 最基本的结构体
type StructA struct {
	FieldA string `form:"field_a"`
}

// 嵌套结构体的结构体
type StructB struct {
	NestedStruct StructA
	FieldB string `form:"field_b"`
}

// 嵌套结构体指针的结构体
type StructC struct {
	NestedStructPointer *StructB
	FieldC string `form:"field_c"`
}
// 返回 StructC
func GetDataC(c *gin.Context) {
	var myStruct StructC

	//Bind自动绑定,根据Content-Type判断绑定json还是xml
	c.Bind(&myStruct)
	c.JSON(200, gin.H{
		"b": myStruct.NestedStructPointer,
		"c": myStruct.FieldC,
	})
}

func main(){
	r := gin.Default()
	r.GET("/getc", GetDataC)
	r.Run()
}

  • form 标签指定了表单名字,这样表单绑定得时候就能获取到指定得值。

运行

访问:http://127.0.0.1:8080/getc?field_a=filed a&field_b=filed b&field_c=filed c

返回:
{"b":{"NestedStruct":{"FieldA":"filed a"},"FieldB":"filed b"},"c":"filed c"}

116

form json xml 绑定

在gin_struct.go中添加

type Login struct {
	User     string `form:"user" json:"user" xml:"user"  binding:"required"`
	Password string `form:"password" json:"password" xml:"password" binding:"required"`
}
func GetJSON(c *gin.Context) {
	var json Login
	if err := c.ShouldBindJSON(&json); err == nil {
		c.JSON(http.StatusBadRequest, gin.H{"user": json.User,"pass":json.Password})
		return
	}
}
func GetXML(c *gin.Context) {
	var xml Login
	if err := c.ShouldBindXML(&xml); err == nil {
		c.JSON(http.StatusBadRequest, gin.H{"user": xml.User,"pass":xml.Password})
		return
	}
}
func GetFORM(c *gin.Context) {
	var form Login
	if err := c.ShouldBind(&form); err == nil {
		c.JSON(http.StatusBadRequest, gin.H{"user": form.User,"pass":form.Password})
		return
	}
}
func main(){
	r := gin.Default()
	r.GET("/getc", GetDataC)
	r.GET("/getJSON", GetJSON)
	r.GET("/getXML", GetXML)
	r.GET("/getFORM", GetFORM)
	r.Run()
}

注: 上面有一个小问题,http状态返回错了,应该返回StatusOk而不是http.StatusBadRequest。

运行

117

118

119

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×