提供了将 web 请求中的查询参数解析到结构体的操作。
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 handle(w http.ResponseWriter, r *http.Request) {
q := &Query{}
errors := query.Parse(r.URL.Query(), 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
}