```go
type State int8
const (
StateLocked State = iota+1
StateDelete
)
// 实现 query.UnmarshalQueryer 接口
func (s *State) UnmarshalQuery(data string) error {
switch data {
case "locked":
*s = StateLocked
case "delete":
*s = StateDelete
default:
return errors.New("无效的值")
}
}
type struct Query {
Page int `query:"page,1"`
Size int `query:"size,20"`
States []State `query:"state,normal"`
}
func (q *Query) SanitizeQuery(errors map[string]string) {
if q.Page < 0 {
errors["page"] = "不能小于零"
}
// 其它字段的验证
}
func handle(w http.ResponseWriter, r *http.Request) {
q := &Query{}
errors := query.Parse(r, q)
if len(errors) > 0 {
// TODO
return
}
// 请求参数为 /?page=1&size=2&state=normal,delete
// 则 q 的值为
// page = 1
// size = 2
// states = []State{StateLocked, StateDelete}
//
// 参数 state 也可使用以下方式
// /?page=1&size=2&state=normal&normal=delete
}
```
https://github.com/issue9/query
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码`
- 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传