| package query | |
| import ( | |
| "fmt" | |
| "reflect" | |
| "net/url" | |
| ) | |
| // Values returns the url.Values encoding of v. | |
| func Values(v interface{}) (url.Values, error) { | |
| values := url.Values{} | |
| val := reflect.ValueOf(v) | |
| if val.Kind() != reflect.Struct { | |
| return nil, fmt.Errorf("query: Values() expects struct input") | |
| } | |
| typ := val.Type() | |
| for i := 0; i < typ.NumField(); i++ { | |
| sf := typ.Field(i) | |
| name := sf.Tag.Get("url") | |
| if name == "" { | |
| name = sf.Name | |
| } | |
| sv := val.Field(i) | |
| values.Add(name, fmt.Sprint(sv.Interface())) | |
| } | |
| return values, nil | |
| } |