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  }