开发者可以在请求中自定义一些变量设置,自定义变量的获取优先级是最高的,可以覆盖原有的客户端提交参数。

    请求输入-自定义参数 - 图1提示

    自定义变量往往也可以做请求流程的变量共享,但是需要注意的是该变量会成为请求参数的一部分,是对业务执行流程公开的变量。

    方法列表:

    1. func (r *Request) SetParam(key string, value interface{})
    2. func (r *Request) GetParam(key string, def ...interface{}) interface{}
    3. func (r *Request) GetParamVar(key string, def ...interface{}) *gvar.Var

    自定义变量可以通过 SetParam 方法进行设置。自定义变量的获取可以通过请求参数的获取方法获得到,例如: Get/GetVar/GetMap 等等,也可以通过特定的自定义变量方法获取到 GetParam/GetParamVar

    使用示例:

    1. package main
    2. import (
    3. "github.com/gogf/gf/v2/frame/g"
    4. "github.com/gogf/gf/v2/net/ghttp"
    5. )
    6. // 前置中间件1
    7. func MiddlewareBefore1(r *ghttp.Request) {
    8. r.SetParam("name", "GoFrame")
    9. r.Response.Writeln("set name")
    10. r.Middleware.Next()
    11. }
    12. // 前置中间件2
    13. func MiddlewareBefore2(r *ghttp.Request) {
    14. r.SetParam("site", "https://goframe.org")
    15. r.Response.Writeln("set site")
    16. r.Middleware.Next()
    17. }
    18. func main() {
    19. s := g.Server()
    20. s.Group("/", func(group *ghttp.RouterGroup) {
    21. group.Middleware(MiddlewareBefore1, MiddlewareBefore2)
    22. group.ALL("/", func(r *ghttp.Request) {
    23. r.Response.Writefln(
    24. "%s: %s",
    25. r.GetParam("name").String(),
    26. r.GetParam("site").String(),
    27. )
    28. })
    29. })
    30. s.SetPort(8199)
    31. s.Run()
    32. }

    可以看到,我们可以通过 SetParamGetParam 来设置和获取自定义的变量,该变量生命周期仅限于当前请求流程。

    执行后,访问 http://127.0.0.1:8199/ ,页面输出内容为:

    1. set name
    2. set site
    3. GoFrame: https://goframe.org