funchandleGetInfo(c *gin.Context){
id := c.Param("id")
action := c.Param("action")
c.JSON(http.StatusOK, gin.H{"id": id,"action": action,})}funcmain(){
r := gin.Default()
r.GET("/info/:id/:action", handleGetInfo)_= r.Run(":8080")}
get 参数获取
获取 GET 参数可以使用 c.Query 函数。这个函数接受一个参数名作为字符串,并返回匹配该参数名的第一个值。如果参数不存在,则返回空字符串。
funchandlerGetParams(c *gin.Context){
name := c.DefaultQuery("name","tom")
age := c.DefaultQuery("age","18")
c.JSON(http.StatusOK, gin.H{"name": name,"age": age,})}funcmain(){
r := gin.Default()
r.GET("/get-params", handlerGetParams)_= r.Run(":8080")}
绑定结构体数据
我们可以使用 ShouldBind 系列方法来绑定请求中的数据到 Go 的结构体。这些方法支持 JSON,XML,form 等数据格式。
type Person struct{
Id int`uri:"id" binding:"required" json:"id"`
Name string`uri:"name" binding:"required" json:"name"`}funchandleParams(c *gin.Context){var person Person
if err := c.ShouldBindUri(&person); err !=nil{
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}
c.JSON(http.StatusOK, person)}funcmain(){
r := gin.Default()
r.GET("/ping", handleParams)_= r.Run(":8080")}
post 参数获取 form-data 数据
获取 POST 参数可以通过 Context.PostForm()方法来实现。这个方法可以获取到 application/x-www-form-urlencoded 类型的数据。
funchandlePostParams(c *gin.Context){
name := c.PostForm("name")
age := c.PostForm("age")
c.JSON(http.StatusOK, gin.H{"name": name,"age": age,})}funcmain(){
r := gin.Default()
r.POST("/post-params", handlePostParams)_= r.Run(":8080")}
post 参数获取 json
要获取 POST JSON 数据,你可以使用 Context.BindJSON()方法。
type User struct{
Name string`json:"name"`
Age int`json:"age"`}funchandlePostJson(c *gin.Context){var user User
if err := c.ShouldBindJSON(&user); err !=nil{
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}
c.JSON(http.StatusCreated, user)}funcmain(){
r := gin.Default()
r.POST("/post-json", handlePostJson)_= r.Run(":8080")}
行为:底层使用 ShouldBindWith 方法,如果存在绑定错误,则返回 go 语言的错误形式,开发人员可以处理错误,请求不会被终
type LoginForm struct{
Name string`form:"name" binding:"required,min=2,max=10"`
Password string`form:"password" binding:"required,min=8,max=20"`}funchandleLogin(c *gin.Context){var loginForm LoginForm
if err := c.ShouldBind(&loginForm); err !=nil{
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}
c.JSON(http.StatusOK,&loginForm)}funcmain(){
r := gin.Default()
r.POST("/login", handleLogin)_= r.Run(":8080")}
from 表单验证 json
type User struct{
Name string`json:"name" binding:"required,min=2,max=20"`
Password string`json:"password" binding:"required,min=8,max=20"`}funchandleLogin(c *gin.Context){var user User
if err := c.ShouldBindJSON(&user); err !=nil{
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})return}
c.JSON(http.StatusOK,&user)}funcmain(){
r := gin.Default()
r.POST("/login", handleLogin)_= r.Run(":8080")}