Versions Compared
compared with
Key
- This line was added.
- This line was removed.
- Formatting was changed.
从v1.15
版本开始,Request
请求对象支持通过struct tag
的方式为输入对象的属性绑定默认值。默认值的struct tag
名称为d
(也可以使用default
)。
我们来看一个示例以便更好理解。
参数对象定义
Code Block | ||
---|---|---|
| ||
type GetListReq struct { g.Meta `path:"/" method:"get"` Type string `v:"required#请选择内容模型" dc:"内容模型"` Page int `v:"min:0#分页号码错误" dc:"分页号码" d:"1"` Size int `v:"max:50#分页数量最大50条" dc:"分页数量,最大50" d:"10"` Sort int `v:"in:0,1,2#排序类型不合法" dc:"排序类型(0:最新, 默认。1:活跃, 2:热度)"` } type GetListRes struct { Items []Item `dc:"内容列表"` } type Item struct { Id int64 `dc:"内容ID"` Title string `dc:"内容标题"` } |
这个是一个查询内容列表请求的参数接受对象,其中我们通过d
的标签为属性Page
和Size
指定了默认值,当这两个参数不传递时,默认为1
和10
,表示分页从第1
页开始,每页查询数量为10
。
参数对象使用
Code Block | ||
---|---|---|
| ||
package main import ( "context" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" ) type GetListReq struct { g.Meta `path:"/" method:"get"` Type string `v:"required#请选择内容模型" dc:"内容模型"` Page int `v:"min:0#分页号码错误" dc:"分页号码" d:"1"` Size int `v:"max:50#分页数量最大50条" dc:"分页数量,最大50" d:"10"` Sort int `v:"in:0,1,2#排序类型不合法" dc:"排序类型(0:最新, 默认。1:活跃, 2:热度)"` } type GetListRes struct { Items []Item `dc:"内容列表"` } type Item struct { Id int64 `dc:"内容ID"` Title string `dc:"内容标题"` } type Controller struct{} func (Controller) GetList(ctx context.Context, req *GetListReq) (res *GetListRes, err error) { g.Log().Info(ctx, req) return } func main() { s := g.Server() s.Group("/content", func(group *ghttp.RouterGroup) { group.Middleware(ghttp.MiddlewareHandlerResponse) group.Bind(&Controller{}) }) s.SetPort(8199) s.Run() } |
我们访问以下地址,并查看服务端终端输出结果:
http://127.0.0.1:8199/content?type=ask
Code Block | ||
---|---|---|
| ||
2023-03-21 21:58:23.058 [INFO] {2883f9c2dc734e170a35c73ea3560b4b} {"Type":"ask","Page":1,"Size":10,"Sort":0} |
http://127.0.0.1:8199/content?type=ask&page=
Code Block | ||
---|---|---|
| ||
2023-03-21 21:58:32.555 [INFO] {b86e22f9de734e170b35c73edf07859d} {"Type":"ask","Page":1,"Size":10,"Sort":0} |
http://127.0.0.1:8199/content?type=ask&page=2
Code Block | ||
---|---|---|
| ||
2023-03-21 22:01:02.907 [INFO] {a016c8fa01744e170f35c73e99082f53} {"Type":"ask","Page":2,"Size":10,"Sort":0} |
可以看到,当调用端不传递或者传递空的page
参数时,服务端都将使用定义的默认值;而当调用端传递具体的page
参数时,默认值并不会生效。
注意事项
默认值参数绑定是根据客户端未提交该参数来识别是否启用默认值,如果客户端已经提交了该参数,即便该参数值是空字符串也会被当做客户端已经传递了具体的值,那么服务端数据结构上的默认值标签将不会生效。
Panel | ||
---|---|---|
| ||
|