package tool import ( "encoding/json" "strings" ) // SnakeString snake string, XxYy to xx_yy , XxYY to xx_y_y func SnakeString(s string) string { data := make([]byte, 0, len(s)*2) j := false num := len(s) for i := 0; i < num; i++ { d := s[i] if i > 0 && d >= 'A' && d <= 'Z' && j { data = append(data, '_') } if d != '_' { j = true } data = append(data, d) } return strings.ToLower(string(data)) } // CamelString camel string, xx_yy to XxYy func CamelString(s string) string { data := make([]byte, 0, len(s)) flag, num := true, len(s)-1 for i := 0; i <= num; i++ { d := s[i] if d == '_' { flag = true continue } else if flag { if d >= 'a' && d <= 'z' { d = d - 32 } flag = false } data = append(data, d) } return string(data) } func FirstLowCamelString(s string) string { data := make([]byte, 0, len(s)) flag, num := true, len(s)-1 for i := 0; i <= num; i++ { d := s[i] if d == '_' { flag = true continue } else if flag { if d >= 'a' && d <= 'z' { d = d - 32 } flag = false } data = append(data, d) } if len(data) > 0 && data[0] >= 65 && data[0] <= 90 { data[0] = data[0] + 32 } return string(data) } func MapToStruct(m map[string]interface{}, s interface{}) error { data, err := json.Marshal(m) if err != nil { return err } err = json.Unmarshal(data, s) if err != nil { return err } return nil } func InterfaceToStruct(m interface{}, s interface{}) error { data, err := json.Marshal(m) if err != nil { return err } err = json.Unmarshal(data, s) if err != nil { return err } return nil }