go 基于泛型的 FUNCTIONAL OPTIONS
Go 语言不支持重载函数,所以,如果需要对需要添加配置选项,需要提供很多的函数名.
为了避免在项目中定义很多 Option 类型的结构体,我们使用泛型
复制代码
本文字数:320 字
阅读完需:约 1 分钟
Go 语言不支持重载函数,所以,如果需要对需要添加配置选项,需要提供很多的函数名.
为了避免在项目中定义很多 Option 类型的结构体,我们使用泛型
// 一般情况下 T 应该是一个结构体
type Option[T any] func(t *T)
// Apply 将 opts 应用在 t 之上
func Apply[T any](t *T, opts ...Option[T]) {
for _, opt := range opts {
opt(t)
}
}
//example
type User struct {
name string
age int
}
func WithName(name string) Option[User] {
return func(u *User) {
u.name = name
}
}
func WithAge(age int) Option[User] {
return func(u *User) {
u.age = age
}
}
u := &User{}
Apply[User](u, WithName("Tom"), WithAge(18))
fmt.Println(u)
// Output:
// &{Tom 18}
还未添加个人签名 2020-07-09 加入
还未添加个人简介
促进软件开发及相关领域知识与创新的传播
评论