package types import "strings" type Param KeyValue[string, []string] type Params []Param func (params Params) GetValue(key string) *[]string { for i := range params { if params[i].Key == key { return ¶ms[i].Value } } return nil } func (params *Params) Append(param Param) { if item := params.GetValue(param.Key); item != nil { *item = append(*item, param.Value...) } else { *params = append(*params, param) } } func (params *Params) Parse(rawValues ...string) { for _, rawValue := range rawValues { params.Append(*ParseParam(rawValue)) } } func ParseParam(rawValue string) *Param { parts := strings.SplitN(rawValue, "=", 2) switch len(parts) { case 1: return &Param{Key: parts[0], Value: []string{""}} case 2: return &Param{Key: parts[0], Value: []string{parts[1]}} default: return &Param{Key: "", Value: []string{""}} } }