package base import ( "fmt" "reflect" "sort" "strings" "github.com/liangdas/mqant/log" ) func GetSignStr(send interface{}) string { m := StructToMapJson(send) str := []string{} for i := range m { if i == "sign" { continue } str = append(str, i) } sort.Strings(str) signStr := "" for i, v := range str { signStr += fmt.Sprintf("%v=%v", v, m[v]) if i != len(str)-1 { signStr += "&" } } log.Debug("signStr:%s", signStr) return signStr } func StructToMapJson(obj interface{}) map[string]interface{} { t := reflect.TypeOf(obj) v := reflect.ValueOf(obj) if t.Kind() == reflect.Ptr { t = t.Elem() v = v.Elem() } var result = make(map[string]interface{}) for i := 0; i < t.NumField(); i++ { if v.Field(i).Kind() == reflect.Ptr && v.Field(i).IsNil() { continue } tagName := t.Field(i).Tag.Get("json") if tagName != "" && tagName != "-" && !v.Field(i).IsZero() { data := v.Field(i).Interface() if v.Field(i).Kind() == reflect.Struct { data = GetSignStr(data) } name := strings.Split(tagName, ",") result[name[0]] = data } } return result }