go选项模式

package main

import "fmt"

type optionClient func(*options)

func setAge(a int) optionClient {
   return func(o *options) {
      o.Age = a
   }
}

func setSex(s int) optionClient {
   return func(o *options) {
      o.Sex = s
   }
}

type options struct {
   Age int
   Sex int
}

type Settings struct {
   Age  int
   Sex  int
   Name string
}

func NewSettings(Name string, clients ...optionClient) *Settings {
   option := options{26, 0}
   for _, f := range clients { //如果传入了自定义参数就会修改默认option,如果没有传入自定义参数,只是传入了姓名,就会用默认的option的值去设置
      f(&option)
   }
   return &Settings{
      Age:  option.Age,
      Sex:  option.Sex,
      Name: "",
   }
}

func main() {
   settings := NewSettings("Jerry", setAge(100), setSex(0))
   fmt.Print(settings.Age)
}




原文地址:https://www.cnblogs.com/hualou/p/12069689.html