Functional Option 2022-05-06
2022-05-06 本文已影响0人
9_SooHyun
Functional Option,工厂模式下的定制化生产
参考https://golang.cafe/blog/golang-functional-options-pattern.html
package main
import "fmt"
type server struct{
a string
b string
}
func Build(options ...func(*server)) server {
svr := server{}
for _, o := range options {
o(&svr)
}
return svr
}
// 给server.a赋值
func Witha(a string) func(*server) {
return func(s *server) {
s.a = a
}
}
// 给server.b赋值
func Withb(b string) func(*server) {
return func(s *server) {
s.b = b
}
}
func main() {
s := Build(
Witha("hhhh"),
Withb("hehe"),
)
fmt.Println(s)
}
例如,golang package github.com/lestrrat-go/file-rotatelogs
的工厂方法New就支持了Functional Option
// New creates a new RotateLogs object. A log filename pattern
// must be passed. Optional `Option` parameters may be passed
func New(p string, options ...Option) (*RotateLogs, error)