Skip to content
master
Go to file
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

query Go Go version Go Report Card license codecov PkgGoDev

提供了将 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 (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.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
}

版权

本项目采用 MIT 开源授权许可证,完整的授权说明可在 LICENSE 文件中找到。

About

解析查询参数到相应的结构体中

Topics

Resources

License

Languages

You can’t perform that action at this time.