type Options struct {
StrOption1 string
StrOption2 string
StrOption3 string
IntOption1 int
IntOption2 int
IntOption3 int
}
type Option func(opts *Options)
func InitOption3(opts ...Option) {
options := &Options{}
for _, opt := range opts {
opt(options)
}

fmt.Printf("init options3:%#v\n", options)
}


func WithStringOption1(str string) Option {
return func(opts *Options) {
opts.StrOption1 = str
}
}

func WithStringOption2(str string) Option {
return func(opts *Options) {
opts.StrOption2 = str
}
}

func WithStringOption3(str string) Option {
return func(opts *Options) {
opts.StrOption3 = str
}
}

func WithIntOption1(val int) Option {
return func(opts *Options) {
opts.IntOption1 = val
}
}

func WithIntOption2(val int) Option {
return func(opts *Options) {
opts.IntOption2 = val
}
}

func WithIntOption3(val int) Option {
return func(opts *Options) {
opts.IntOption3 = val
}
}


func main() {
InitOption3(
WithStringOption1("str1"),
WithStringOption3("str3"),
WithIntOption3(3),
WithIntOption2(2),
WithIntOption1(1),
WithStringOption2("str2"),
)
}


执行:

init options3:&main.Options{StrOption1:"str1", StrOption2:"str2", StrOption3:"str3", IntOption1:1, IntOption2:2, IntOption3:3}