中国最大网站建设商,北京市建设工程网,网页设计需要学编程吗,国家企业信用公示信息系统(湖南)一 什么是函数选项模式
函数选项模式允许你使用接受零个或多个函数作为参数的可变构造函数来构建复杂结构。我们将这些函数称为选项#xff0c;由此得名函数选项模式。
例子#xff1a;
有业务实体Animal结构体#xff0c;构造函数NewAnimal#xff08;#xff09;由此得名函数选项模式。
例子
有业务实体Animal结构体构造函数NewAnimal
type Animal struct {Name string
}func NewAnimal(name string) *Animal {return Animal{Name: name,}
}a1 : NewAnimal(兔)
后面由于业务改动需要Animal新增一个属性Age这时构造函数NewAnimal就得相应做修改调用的地方全部都得改势必会影响现有代码
type Animal struct {Name stringAge int
}func NewAnimal(name string,age int) *Animal {return Animal{Name: name,Age :age,}
}a1 : NewAnimal(兔,1)
后续逐步加新字段这个构造函数就会被撑爆了如果调用的地方越多很难维护。 二 函数选项模式实现
先定义一个函数类型OptionFunc
type OptionFunc func(*Animal)
根据新结构体字段定义With开头的函数返回函数类型为OptionFunc的闭包函数内部逻辑只需要实现更新对应字段值即可
func WithHeight(name string) OptionFunc {return func(a *Animal) { a.Name name }
}
func WithAge(age int) OptionFunc {return func(a *Animal) { a.Age age }
}。。。。调用优化后的构造函数快速实现实例的初始化。想要指定哪个字段值那就调用相应的With开头的函数完全做到可配置化、可插拔不指定还支持了默认值
func NewAnimal(name string, opts ...OptionFunc) *Animal {a : Animal{Name: name, Age: 4}for _, opt : range opts {opt(a)}return a
}
三 总结
函数选项模式的好处
直觉式的编程高度的可配置化很容易维护和扩展自文档对于新来的人很容易上手没有什么令人困惑的事是nil 还是空 参考https://coolshell.cn/articles/21146.html