开发者可以在请求中自定义一些变量设置,自定义变量的获取优先级是最高的,可以覆盖原有的客户端提交参数。
自定义变量往往也可以做请求流程的变量共享,但是需要注意的是该变量会成为请求参数的一部分,是对业务执行流程公开的变量。
方法列表:
func (r *Request) SetParam(key string, value interface{}) func (r *Request) GetParam(key string, def ...interface{}) interface{} func (r *Request) GetParamVar(key string, def ...interface{}) *gvar.Var
自定义变量可以通过SetParam
方法进行设置。自定义变量的获取可以通过请求参数的获取方法获得到,例如:Get/GetVar/GetMap
等等,也可以通过特定的自定义变量方法获取到GetParam/GetParamVar
。
使用示例:
package main import ( "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" ) // 前置中间件1 func MiddlewareBefore1(r *ghttp.Request) { r.SetParam("name", "GoFrame") r.Response.Writeln("set name") r.Middleware.Next() } // 前置中间件2 func MiddlewareBefore2(r *ghttp.Request) { r.SetParam("site", "https://goframe.org") r.Response.Writeln("set site") r.Middleware.Next() } func main() { s := g.Server() s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(MiddlewareBefore1, MiddlewareBefore2) group.ALL("/", func(r *ghttp.Request) { r.Response.Writefln( "%s: %s", r.GetParamVar("name").String(), r.GetParamVar("site").String(), ) }) }) s.SetPort(8199) s.Run() }
可以看到,我们可以通过SetParam
和GetParam
来设置和获取自定义的变量,该变量生命周期仅限于当前请求流程。
执行后,访问 http://127.0.0.1:8199/ ,页面输出内容为:
set name set site GoFrame: https://goframe.org