github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/generic/http/client/client.utils.go (about) 1 package client 2 3 import ( 4 "fmt" 5 "net/url" 6 "reflect" 7 ) 8 9 // ParseQueryParams . 10 func ParseQueryParams(path string, params interface{}) string { 11 baseURL, _ := url.Parse(path) 12 filterParams := baseURL.Query() 13 rval := reflect.Indirect(reflect.ValueOf(params)) 14 rtype := rval.Type() 15 16 for i := 0; i < rval.NumField(); i++ { 17 tag := rtype.Field(i).Tag.Get("json") 18 switch rval.Field(i).Kind() { 19 case reflect.Slice: 20 val := rval.Field(i) 21 if !val.IsNil() { 22 for i := 0; i < val.Len(); i++ { 23 filterParams.Add(tag, fmt.Sprintf("%v", val.Index(i))) 24 } 25 } 26 break 27 28 case reflect.String: 29 val := rval.Field(i).String() 30 if val != "" { 31 filterParams.Add(tag, fmt.Sprintf("%v", val)) 32 } 33 break 34 35 case reflect.Ptr: 36 if rval.Field(i).Elem().IsValid() { 37 val := rval.Field(i) 38 filterParams.Add(tag, fmt.Sprintf("%v", val)) 39 } 40 break 41 42 default: 43 val := rval.Field(i) 44 filterParams.Add(tag, fmt.Sprintf("%v", val)) 45 break 46 } 47 } 48 49 baseURL.RawQuery = filterParams.Encode() 50 51 return baseURL.String() 52 }