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)) }
好处:结构体增加新的字段不影响现有功能。