Gin框架中, 设置路径的可选访问参数
在一个路径的参数前加上*
, 即可将该参数设置为可选参数, 如下:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
// 记住这里面的part 1 和 part 2 代表的部分
r := gin.Default()
// begin: part 1, 无可选参数
r.GET("/:name", func(c *gin.Context) {
name := c.Param("name")
message := "Hello, " + name
c.String(http.StatusOK, "%s", message)
})
// end: part 1
// begin: part 2, 有可选参数
// 设置role为可选参数
r.GET("/:name/*role", func(c *gin.Context) {
name := c.Param("name")
role := c.Param("role")
message := name + " is " + role
c.String(http.StatusOK, "%s", message)
})
// end: part 2
r.Run() // listen and serve on 0.0.0.0:8080
}
包含 part 1 和 part 2 两个部分的内容可以匹配到如下类型的 URL
:
http://localhost:8080/my_name
http://localhost:8080/my_name/leaner
但是如果缺少part 1, 即如下的代码:
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
// 记住这里面的part 1 和 part 2 代表的部分
r := gin.Default()
// begin: part 2, 有可选参数
// 设置role为可选参数
r.GET("/:name/*role", func(c *gin.Context) {
name := c.Param("name")
role := c.Param("role")
message := name + " is " + role
c.String(http.StatusOK, "%s", message)
})
// end: part 2
r.Run() // listen and serve on 0.0.0.0:8080
}
只能匹配如下类型的 URL
:
http:localhost:8080/my_name/leaner
如果试图通过http:localhost:8080/my_name
去访问, 会直接报 404
:
因为项目中缺少了匹配/:name
的部分, 所以匹配失败
总结
要设置可选参数, 必须要将 part 1 带入, 否则可选参数将变为“必选参数”