go语言新建结构体优雅的初始化参数
由于go没有默认参数,所以需要一种优雅的通用的方式进行结构体的初始化,直接上代码
type T struct {
name string
option Option
}
type Option struct {
age int
sise int
number int
school string
}
type funcOpt func(option *Option)
func WithAge(age int) funcOpt {
return func(option *Option) {
option.age = age
}
}
func WithSize(size int) funcOpt {
return func(option *Option) {
option.sise = size
}
}
func NewT(name string, opt ...funcOpt) *T {
option := Option{
age: 0,
sise: 0,
number: 0,
school: "hign",
}
for _, fn := range opt {
fn(&option)
}
return &T{
name: name,
option: option,
}
}
func main() {
NewT("test", WithAge(18), WithSize(18))
}