Routing Parameters
Param
When the registered route format is:
, /path/:a/:b
its :x
refers to the route parameter, and the Param("x")
value information can be obtained directly.
- Code example:
package main
import (
"github.com/gin-gonic/gin" // Import Gin framework
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register routing
engine.GET("/test/:name", func(context *gin.Context) {
// Receive parameters
name := context.Param("name")
context.JSON(200, gin.H{"msg": "success", "name": name})
})
engine.GET("/test/:name/:age", func(context *gin.Context) {
// receive parameters
name := context.Param("name")
age := context.Param("age")
context.JSON(200, gin.H{
"msg": "success",
"name": name,
"phone": age,
})
})
engine.GET("/test/:name/:age/:height", func(context *gin.Context) {
// receive parameters
name := context.Param("name")
age := context.Param("age")
height := context.Param("height")
context.JSON(200, gin.H{
"msg": "success",
"name": name,
"phone": age,
"height": height,
})
})
_ = engine.Run(":9090")
}
- The request returns:
$ curl -X GET http://127.0.0.1:9090/test/finbarrs
{"msg":"success","name":"finbarrs"}%
$ curl -X GET http://127.0.0.1:9090/test/finbarrs/18
{"msg":"success","name":"finbarrs","phone":"18"}%
$ curl -X GET http://127.0.0.1:9090/test/finbarrs/18/170
{"height":"170","msg":"success","name":"finbarrs","phone":"18"}%
GET
Parameters
Receiving a single value
In the Gin
framework, parameter information can be obtained by passing it, but it Query
, DefaultQuery
, GetQuery
is a secondary encapsulation. GetQuery
, DefaultQuery
, GetQuery
.
- Code example:
package main
import (
"github.com/gin-gonic/gin" // Import Gin framework
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register the route
testReceiveGetParam(engine)
_ = engine.Run(":9090")
}
func testReceiveGetParam(engine *gin.Engine) {
engine.GET("/receive", func(context *gin.Context) {
// If does not exist or is empty, return: ""
name := context.Query(" name")
// if it does not exist or is empty, return the default value
age := context.DefaultQuery("age", "18")
// use GetQuery directly
home, ok := context.GetQuery("home")
context.PureJSON(200, gin.H{
"msg": "success",
"context.Query->name": name,
"context.DefaultQuery->age": age,
"context.GetQuery->home": home,
"context.GetQuery->ok": ok,
})
})
}
- The request returns:
# When no parameters are passed, see the reception situation
➜ curl -X GET http://127.0.0.1:9090/receive
{"context.DefaultQuery->age":"18","context.GetQuery->home":"","context.GetQuery->ok":false,"context.Query->name":"","msg":"success"}
# When any parameter is passed, check the reception status
➜ curl -X GET http://127.0.0.1:9090/receive\?age\=25\&home\=Mars\&name\=Marsereo
{"context.DefaultQuery->age":"25","context.GetQuery->home":"Mars","context.GetQuery->ok":true,"context.Query->name":"Marsereo","msg":"success"}
Receive array
In the Gin
framework, the array value information in the submission can be submitted through QueryArray("param[]")
and GetQueryArray("param[]")
acquisition GET
methods, QueryArray
but for the GetQueryArray
secondary encapsulation, refer to the following code for specific use:
- Code example:
//--------- main.go ---------------
package main
import (
"go_use/practise" // code sample package
"github.com/gin-gonic/gin" // Import Gin framework
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register routing
practise.TestReceiveGetArrayParam(engine)
_ = engine.Run(":9090")
}
//------ go_use/practise/param_receice.go -------
// Receive array
func TestReceiveGetArrayParam(engine *gin.Engine) {
engine.GET("/getArr", func(context *gin.Context) {
// Receive GET array: /getArr?name[]=finbarrs&name[]=Oketunji
nameList := context.QueryArray("name[]")
context.JSON(200, gin.H{
"arr": nameList,
})
})
}
- Receive Map
In the Gin
framework, the value information in the submission can be passed QueryMap("param")
and GetQueryMap("param")
obtained, but for the secondary encapsulation, please refer to the following code for specific use: GET
map
QueryMap
GetQueryMap
.
- Code example:
//--------- main.go ---------------
package main
import (
"go_use/practise" // code sample package
"github.com/gin-gonic/gin" // Import Gin framework
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register routing
practise.TestRecGetMapParam(engine)
_ = engine.Run(":9090")
}
//------ go_use/practise/param_receice.go -------
// Receive map
func TestRecGetMapParam(engine *gin.Engine) {
engine.GET("/getMap", func(context *gin.Context) {
//Receive GET map: /getMap?score[language]=95&score[math]=100
queryMap := context.QueryMap("score")
context.JSON(200, gin.H{
"map": queryMap,
})
})
}
POST
Parameters
Receiving a single value
In the Gin
framework, the submitted parameter information can be PostForm
, DefaultPostForm
, GetPostFormobtained
, and it is also the right secondary encapsulation. Post
, PostForm
, DefaultPostForm
, GetPostForm
.
- Code example:
//-------- main.go ---------------
package main
import (
"go_use/practise"
"github.com/gin-gonic/gin"
)
func main() {
// create a default routing engine
engine := gin.Default()
// register routes
practise.TestRecPostSingleValue(engine)
_ = engine.Run(":9090")
}
//------ go_use/practise/param_receice.go -------
// receive single value: PostForm, DefaultPostForm, GetPostForm
func TestRecPostSingleValue(engine *gin.Engine) {
engine.POST("/postSingle", func(context *gin.Context) {
name := context.PostForm("name")
age := context.DefaultQuery("age", "25")
home, ok := context.GetPostForm("home")
context.JSON(200, gin.H{
"postForm": name,
"DefaultQuery": age,
"GetPostForm.home": home,
"GetPostForm.ok": ok,
})
})
}
- The request returns:
# When no parameters are passed, see the reception situation
$ curl -X POST http://127.0.0.1:9090/postSingle
{"DefaultQuery":"25","GetPostForm.home":"","GetPostForm.ok":false,"postForm":""}
# When passing any parameters, look at the reception status
$ curl -X POST http://127.0.0.1:9090/postSingle -d "age=25&home=Mars&name=Marsero"
{"DefaultQuery":"25","GetPostForm.home":"Mars","GetPostForm.ok":true,"postForm":"Marsero"}
Receive array
In the Gin
framework, the array value information in the submission can be submitted through PostFormArray("param[]")
and GetPostFormArray("param[]")
acquisition POST
methods, PostFormArray
but for GetPostFormArray
secondary encapsulation, please refer to the following code for specific use:
- Code example:
//-------- main.go ---------------
package main
import (
"go_use/practise"
"github.com/gin-gonic/gin"
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register routing
practise.TestRecPostArrValue(engine)
_ = engine.Run(":9090")
}
//------ go_use/practise/param_receice.go -------
// Receive array submitted by POST
func TestRecPostArrValue(engine *gin.Engine) {
engine.POST("/postArr", func(context *gin.Context) {
arr := context.PostFormArray("name")
context.JSON(200, gin.H{
"postArr": arr,
})
})
}
- The request returns:
$ curl -X POST http://127.0.0.1:9090/postArr -d "name[]=Finbarrs&name[]=Oketunji"
{"postArr":["Finbarrs","Oketunji"]}
Receive Map
In the Gin
framework, you can submit the mapping () information in the pass PostFormMap("param")
and GetPostFormMap("param")
get methods. For specific use, refer to the following code: POST
map
- Code example:
//--- main.go ---------------
package main
import (
"go_use/practise"
"github.com/gin-gonic/gin"
)
func main() {
// create a default routing engine
engine := gin.Default()
// register routes
practise.TestRecPostMapValue(engine)
_ = engine.Run(":9090")
}
//--- go_use/practise/param_receice.go -------
// Receive map information submitted by POST
func TestRecPostMapValue(engine *gin.Engine) {
engine.POST("/postMap", func(context *gin.Context) {
formMap := context.PostFormMap("score")
context.JSON(200, gin.H{"map": formMap})
})
}
- The request returns:
$ curl -X POST http://127.0.0.1:9090/postMap -d "score[English]=100&score[Math]=100"
{"map":{"Math":"100","English":"100"}}
Receive JSON
In the Gin
framework, the BindJSON(¶m)
submitted json
format data can be received by using the following code:
- Code example:
//--- main.go ---------------
package main
import (
"go_use/practise"
"github.com/gin-gonic/gin"
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register routing
practise.TestRecPostJson(engine)
_ = engine.Run(":9090")
}
//--- go_use/practise/param_receice.go -------
// Method 1: Directly assign the JSON submitted by POST to the variable
func TestRecPostJson(engine *gin.Engine) {
engine.POST("/postJson", func(context *gin.Context) {
param := make(map[string]interface{})
err := context.BindJSON(¶m)
if err != nil {
context.JSON(500, gin.H{"err": err})
return
}
context.JSON(200, gin.H{"return": param})
})
}
- The request returns:
# Request
curl -X POST http://127.0.0.1:9090/postJson -d '{
"name":"Marsero Perro",
"age":25,
"likes":["playing games","tourism"]
}'
# Return
{"return":{"age":25,"likes":["Playing games","Tourism"],"name":"Marsero Perro"}}
- Bind to the struct
//--- main.go ---------------
package main
import (
"go_use/practise"
"github.com/gin-gonic/gin"
)
func main() {
// Create a default routing engine
engine := gin.Default()
// Register routing
practise.TestRecPostJson2(engine)
_ = engine.Run(":9090")
}
//--- go_use/practise/param_receice.go -------
// Define the bound struct
type People struct {
Name string `json:"name"`
Age int `json:"age "`
Likes []string `json:"likes"`
}
// Method 2: Bind the JSON submitted by POST to the structure
func TestRecPostJson2(engine *gin.Engine) {
engine.POST("/postJson2", func(context *gin.Context) {
people := &People{}
err := context.BindJSON(&people)
if err != nil {
context.JSON(500, gin.H{"err": err})
}
context.JSON(200, gin.H{"return": people})
})
}
Request and return as above.