分享一个将查询参数解析到 struct 的包

xnotepad · · 578 次点击    
这是一个分享于 的资源,其中的信息可能已经有所发展或是发生改变。
```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

578 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传