package stringutils import ( "regexp" "strings" "unicode" ) var regID = regexp.MustCompile("^(?i)id$") var regUUID = regexp.MustCompile("^(?i)uuid$") var regCSS = regexp.MustCompile("^(?i)css$") // FormatToStructFieldName format a string // to have the go struct Field Name convention func FormatToStructFieldName(in string) string { runes := []rune(in) length := len(runes) var out []rune for i := 0; i < length; i++ { if i == 0 && unicode.IsLower(runes[i]) && len(runes) > 1 { out = append(out, unicode.ToUpper(runes[i])) } else if i > 0 && unicode.IsUpper(runes[i]) { out = append(out, unicode.ToLower(runes[i])) } else { out = append(out, runes[i]) } } sOut := string(out) if regID.MatchString(sOut) || regUUID.MatchString(sOut) || regCSS.MatchString(sOut) { sOut = strings.ToUpper(sOut) } return sOut }