1. 程式人生 > >golang 一鍵生成 form,json,gorm標籤

golang 一鍵生成 form,json,gorm標籤

每次有新表產生時,就會有新的model,model編寫完後,繁雜的標籤註解令人煩躁,所以寫了這樣的工具。


func AddJsonFormGormTag(in string) (string) {
	var result string
	scanner := bufio.NewScanner(strings.NewReader(in))
	var oldLineTmp = ""
	var lineTmp = ""
	var propertyTmp = ""
	var seperateArr []string
	for scanner.Scan() {
		oldLineTmp = scanner.
Text() lineTmp = strings.Trim(scanner.Text(), " ") if strings.Contains(lineTmp, "{") || strings.Contains(lineTmp, "}") { result = result + oldLineTmp + "\n" continue } seperateArr = Split(lineTmp, " ") // 介面或者父類宣告不參與tag, 自帶tag不參與tag if len(seperateArr) == 1 || len(seperateArr) == 3 {
continue } propertyTmp = HumpToUnderLine(seperateArr[0]) oldLineTmp = oldLineTmp + fmt.Sprintf(" `gorm:\"column:%s\" json:\"%s\" form:\"%s\"`", propertyTmp, propertyTmp, propertyTmp) result = result + oldLineTmp + "\n" } return result } // 增強型split,對 a,,,,,,,b,,c 以","進行切割成[a,b,c]
func Split(s string, sub string) []string { var rs = make([]string, 0, 20) tmp := "" Split2(s, sub, &tmp, &rs) return rs } // 附屬於Split,可獨立使用 func Split2(s string, sub string, tmp *string, rs *[]string) { s = strings.Trim(s, sub) if !strings.Contains(s, sub) { *tmp = s *rs = append(*rs, *tmp) return } for i, _ := range s { if string(s[i]) == sub { *tmp = s[:i] *rs = append(*rs, *tmp) s = s[i+1:] Split2(s, sub, tmp, rs) return } } } // 駝峰轉下劃線 func HumpToUnderLine(s string) string{ if s =="ID" { return "id" } var rs string elements:=FindUpperElement(s) for _,e :=range elements{ s =strings.Replace(s, e, "_"+strings.ToLower(e),-1) } rs = strings.Trim(s," ") rs = strings.Trim(rs,"\t") return strings.Trim(rs,"_") } // 找到字串中大寫字母的列表,附屬於HumpToUnderLine func FindUpperElement(s string) []string { var rs = make([]string, 0, 10) for i := range s { if s[i] >= 65 && s[i] <= 90 { rs = append(rs, string(s[i])) } } return rs }

如何使用

func TestAddJsonFormTag(t *testing.T) {
	rs := AddJsonFormGormTag(`
	type User struct{
		Id        uint64
		NameSpace  string
		DailyRoutine int
	}
	`)
	fmt.Println(rs)
}

結果

	type User struct{
		Id        uint64    `gorm:"column:id" json:"id" form:"id"`
		NameSpace  string    `gorm:"column:name_space" json:"name_space" form:"name_space"`
		DailyRoutine int    `gorm:"column:daily_routine" json:"daily_routine" form:"daily_routine"`
	}

具體對齊,使用go fmt xxx.go 命令 goland 快捷鍵是 ctrl alt L