Options的理解和在go-micro中的使用
c++中有重载,python中的函数参数可以省略,golang提供Options达到替代效果,几乎很多的框架中都有应用。
一般框架中似乎会定义一个叫做Options的结构体,感觉这个命名对初学者真不友好。记住Option是函数,Options是结构体。Options里面包含该框架的基本类型,而Option则代表操作其中一个或多个类型的函数。
type Option func(*Options)
感觉不叫Options反而更加易读。如Person结构体
type Person struct {
Name string
Age int
Gender int
Height int
Country string
City string
}
type Option func(*Person) //Option是对Person结构体操作的函数的别名
func NewPerson(opt ...Option) *Person{
p := new(Person)
p.Country = "china"
p.City = "beijing"
//上面提供默认值
for _, o := range opt{
o(p)
}
return p
}
func WithRegional(country, city string) Options {
return func(p *Person