Go functional options pattern

type Person struct {
   Name   string
   Age    int
   Gender int
}

type PersonFunc func(*Person)

func WithName(name string) PersonFunc {
   return func(p *Person) {
      p.Name = name
   }
}

func WithAge(age int) PersonFunc {
   return func(p *Person) {
      p.Age = age
   }
}

func NewPerson(name string, opts ...PersonFunc) *Person {
   p := &Person{Name: name}

   for _, opt := range opts {
      opt(p)
   }

   return p
}

func main() {
   NewPerson("汪淼", WithAge(33))
}

好处:结构体增加新的字段不影响现有功能。

 Go设计模式之函数选项模式_Generalzy的博客-CSDN博客

你可能感兴趣的:(golang,开发语言,后端)