sloth 工具:
1、支持为结构体属性自动生成Get\Set方法,必须参数
a、-out:需要自动生成生成代码的结构体(多个时,号分开),结构体必须存在。
b、-fun:set|get组合(,号分割),也可以是单独使用,即-fun=set只生成Set方法,-fun=get只生成Get方法。
c、-mod: 自定义模板支持,指定模板文件目录。模板文件命名必须为:sloth_getter.tmp|sloth_setter.tmp。
2、支持自定义模板:
模板变量使用{{.var}}标识,可用组合变量:
Receiver:结构体简写(首字母)
Struct:结构体
Field:结构体public字段
Type:结构体public字段类型
Column:gorm映射字段
示例:
func ({{.Receiver}} *{{.Struct}}) Get{{.Field}}() {{.Type}} {
return {{.Receiver}}.{{.Field}}
}
func ({{.Receiver}} *{{.Struct}}) Set{{.Field}}(val {{.Type}}) {
{{.Receiver}}.{{.Field}} = val
//From custom template
}
用法
install sloth:
go install github.com/bill-cang/sloth@latest
用例
在需要生成代码的结构体文件添加命令://go:generate sloth -out=Bloc,Office -fun=set,get
在文件过载目录执行命令:go generate
//go:generate sloth -out=Bloc,Office -fun=set,get
package example
type Bloc struct {
Office
Name string `gorm:"column:name;not null;comment:名称"`
Logo string `gorm:"column:logo;comment:logo"`
Master string `gorm:"column:master;comment:负责人"`
Phone string `gorm:"column:phone;comment:电话"`
Email string `gorm:"column:email;comment:邮箱"`
ProvinceID string `gorm:"column:province_id;comment:所属省id"`
CityID string `gorm:"column:city_id;comment:所属市id"`
Address string `gorm:"column:address;comment:地址"`
}
type Office struct {
Name string `gorm:"column:name;not null;comment:名称"`
Logo string `gorm:"column:logo;comment:机构logo"`
Master string `gorm:"column:master;comment:负责人"`
Email string `gorm:"column:email;comment:邮箱"`
Phone string `gorm:"column:phone;comment:电话"`
Address string `gorm:"column:address;comment:联系地址"`
ProvinceID string `gorm:"column:province_id;comment:所属省id"`
CityID string `gorm:"column:city_id;comment:所属市id"`
}
会生成两个文件,bloc_sloth.go 和 office_sloth.go
bloc_sloth.go
// Code generated by "sloth -out=Bloc,Office -fun=set,get"; DO NOT EDIT.
package example
func (b *Bloc) SetName(val string) {
b.Name = val
}
func (b *Bloc) GetName() string {
return b.Name
}
func (b *Bloc) SetLogo(val string) {
b.Logo = val
}
func (b *Bloc) GetLogo() string {
return b.Logo
}
func (b *Bloc) SetMaster(val string) {
b.Master = val
}
func (b *Bloc) GetMaster() string {
return b.Master
}
func (b *Bloc) SetPhone(val string) {
b.Phone = val
}
func (b *Bloc) GetPhone() string {
return b.Phone
}
func (b *Bloc) SetEmail(val string) {
b.Email = val
}
func (b *Bloc) GetEmail() string {
return b.Email
}
func (b *Bloc) SetProvinceID(val string) {
b.ProvinceID = val
}
func (b *Bloc) GetProvinceID() string {
return b.ProvinceID
}
func (b *Bloc) SetCityID(val string) {
b.CityID = val
}
func (b *Bloc) GetCityID() string {
return b.CityID
}
func (b *Bloc) SetAddress(val string) {
b.Address = val
}
func (b *Bloc) GetAddress() string {
return b.Address
}
office_sloth.go
// Code generated by "sloth -out=Bloc,Office -fun=set,get"; DO NOT EDIT.
package example
func (o *Office) SetName(val string) {
o.Name = val
}
func (o *Office) GetName() string {
return o.Name
}
func (o *Office) SetLogo(val string) {
o.Logo = val
}
func (o *Office) GetLogo() string {
return o.Logo
}
func (o *Office) SetMaster(val string) {
o.Master = val
}
func (o *Office) GetMaster() string {
return o.Master
}
func (o *Office) SetEmail(val string) {
o.Email = val
}
func (o *Office) GetEmail() string {
return o.Email
}
func (o *Office) SetPhone(val string) {
o.Phone = val
}
func (o *Office) GetPhone() string {
return o.Phone
}
func (o *Office) SetAddress(val string) {
o.Address = val
}
func (o *Office) GetAddress() string {
return o.Address
}
func (o *Office) SetProvinceID(val string) {
o.ProvinceID = val
}
func (o *Office) GetProvinceID() string {
return o.ProvinceID
}
func (o *Office) SetCityID(val string) {
o.CityID = val
}
func (o *Office) GetCityID() string {
return o.CityID
}