写点什么

go 基于泛型的 FUNCTIONAL OPTIONS

作者:Z.K
  • 2022-12-06
    广东
  • 本文字数:320 字

    阅读完需:约 1 分钟

  1. Go 语言不支持重载函数,所以,如果需要对需要添加配置选项,需要提供很多的函数名.

  2. 为了避免在项目中定义很多 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) }}

//exampletype 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}
复制代码


用户头像

Z.K

关注

还未添加个人签名 2020-07-09 加入

还未添加个人简介

评论

发布
暂无评论
go基于泛型的FUNCTIONAL OPTIONS_Z.K_InfoQ写作社区