github.com/yaoapp/kun@v0.9.0/share/share.go (about) 1 package share 2 3 import ( 4 "reflect" 5 "regexp" 6 "strings" 7 ) 8 9 var matchFirstCap = regexp.MustCompile("(.)([A-Z][a-z]+)") 10 var matchAllCap = regexp.MustCompile("([a-z0-9])([A-Z])") 11 12 // GetTagName get the tag name of the reflect.StructField 13 func GetTagName(field reflect.StructField, name string) string { 14 tag := field.Tag.Get(name) 15 if tag == "" { 16 tag = Snake(field.Name) 17 return tag 18 } 19 20 tagr := strings.Split(tag, ",") 21 return tagr[0] 22 } 23 24 // Snake The Snake method converts the given string to snake_case 25 func Snake(str string) string { 26 snake := matchFirstCap.ReplaceAllString(str, "${1}_${2}") 27 snake = matchAllCap.ReplaceAllString(snake, "${1}_${2}") 28 return strings.ToLower(snake) 29 }