快捷搜索: 王者荣耀 脱发

gin框架入门(三)-路由参数

PATH传值-Get请求

package main

import (
	"net/http"

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

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

	r.GET("/getInfo/:name/*action", func(c *gin.Context) {
		username := c.Param("name")
		action := c.Param("action")
		c.JSON(http.StatusOK, gin.H{
			"username": username,
			"action":   action,
		})
	})
	r.Run(":8080")
}

示例中,可以匹配/getInfo/xx/或者/getInfo/xx/xx路径

:name表示是必须参数

*action表示是可选参数

如路径/getInfo/mina/run。name匹配mina;action匹配/run

查询参数-Get请求

c.Query 获取查询参数

c.DefaultQuery 获取查询参数,并给定默认值。

package main

import (
	"net/http"

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

func main() {
	r := gin.Default()
	r.GET("/getInfo", func(c *gin.Context) {
		username := c.Query("username")
		age := c.Query("age")
		page := c.DefaultQuery("page", "1")
		c.JSON(http.StatusOK, gin.H{
			"username": username,
			"age":      age,
			"page":     page,
		})
	})
	r.Run(":8080")
}

Form表单传值-Post请求

c.PostForm 获取Form表单数据

c.DefaultPostForm 获取Form表单数据,并给定默认值。

package main

import (
	"net/http"

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

func main() {
	r := gin.Default()
	r.POST("/postForm", func(c *gin.Context) {
		username := c.PostForm("username")
		age := c.PostForm("age")
		page := c.DefaultPostForm("page", "1")
		c.JSON(http.StatusOK, gin.H{
			"username": username,
			"age":      age,
			"page":     page,
		})
	})
	r.Run(":8080")
}

数据绑定到结构体

获取Query(get)、Form表单(post)数据绑定到结构体

Query(get)、Form表单(post)数据绑定到结构体的方法相同。都是使用c.ShouldBind绑定数据。

结构体中需要用form标签直接form表单的key,json标签为转为json格式时的key。

package main

import (
	"net/http"

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

type UserInfo struct {
	Username string `form:"username" json:"user"`
	Age      int    `form:"age" json:"age"`
	Page     int    `form:"page" json:"page"`
}

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

	r.POST("/postForm", func(c *gin.Context) {
		userInfo := &UserInfo{}

		if err := c.ShouldBind(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})

	r.GET("/getQuery", func(c *gin.Context) {
		userInfo := &UserInfo{}

		if err := c.ShouldBind(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})

	r.Run(":8080")
}

JSON数据绑定到结构体

c.ShouldBindJSON json数据绑定到结构体

package main

import (
	"net/http"

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

type UserInfo struct {
	Username string `json:"user"`
	Age      int    `json:"age"`
	Page     int    `json:"page"`
}

func main() {
	r := gin.Default()
	r.POST("/postJSON", func(c *gin.Context) {
		userInfo := &UserInfo{}

		if err := c.ShouldBindJSON(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})
	r.Run(":8080")
}

XML数据绑定到结构体

结构体中xml标签指定key

c.BindXML 绑定XML数据到结构体

package main

import (
	"net/http"

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

type UserInfo struct {
	Username string `xml:"username" json:"user"`
	Age      int    `xml:"age" json:"age"`
	Page     int    `xml:"page" json:"page"`
}

func main() {
	r := gin.Default()
	r.POST("/postXML", func(c *gin.Context) {
		userInfo := &UserInfo{}

		// 解析XML
		if err := c.ShouldBindXML(userInfo); err == nil {
			c.JSON(http.StatusOK, userInfo)
		} else {
			c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		}
	})
	r.Run(":8080")
}
经验分享 程序员 微信小程序 职场和发展