Go语言Gin框架基础知识代码示例(3) | 青训营笔记

99 阅读1分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天

本文将记录Gin框架的数据解析的一些知识

其中测试,我使用Postman进行

首先请看代码结构

image.png

main中存放主函数,models存放了几个结构体,类似于Java开发中的实体类,routers下存放两个路由

models.User代码如下

package models

type User1 struct {
	UserName     string `form:"userName" json:"userName"`
	UserPassword string `form:"userPassword" json:"userPassword"`
}

models.Info代码如下

package models

type Info struct {
   Info string `form:"info"`
}

注意 请在结构体上标明必要的form等等,否则有可能无法使用Gin的许多方法或出现某些问题 但是经过我实际测量,有时不加也是可以正常运行的...不知为什么

routers.r1代码如下

package routers

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

func getUser(ctx *gin.Context) {
   var userJSON models.User1
   //Bind用来匹配(以Postman为例)form-data、x-www-form-urlencoded类型,请注意参数为地址否则会报错!
   err := ctx.Bind(&userJSON)
   if err != nil {
      fmt.Printf("POST ERROR %t\n", err)
      return
   }
   fmt.Println(userJSON)

}

func LoadR1(engine *gin.Engine) {
   engine.POST("/r1", getUser)
}

测试使用Postman,使用这两项:form-data 与x-www-form-urlencoded均可,在其中输入代码值即可

image.png

routers.r2代码如下

package routers

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

/**
type Info struct {
   Info string
}
*/

func getInfo(ctx *gin.Context) {
   var info models.Info
   err := ctx.ShouldBindJSON(&info)
   if err != nil {
      fmt.Printf("POST ERROR %t\n", err)
      return
   }
   fmt.Println(info.Info)
}

func LoadR2(engine *gin.Engine) {
   engine.POST("/r2", getInfo)
}

此时使用ShouldBindJSON方法解析JSON对象,在Postman测试时如图:

image.png

结果如下:

image.png

可见成功打印111

请不要忘记Headers中进行配置,当然默认是配置好的...

image.png


  • 在进行多个JSON对象解析时请使用ShouldBindBodyWith方法
  • ShouldBindUri用来解析URL

补充 main函数

package main

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

func main() {
   route := gin.Default()
   routers.LoadR1(route)
   routers.LoadR2(route)
   err := route.Run(":80")
   if err != nil {
      fmt.Println("ERROR")
      return
   }
}