相信大家在调用一些官方包的函数时,经常会遇到传参为option可选项,尤其是加载配置。当一个函数可选参数较多或者以后需要拓展参数时,不妨使用Option选项模式。
package main
import "fmt"
type Config struct {
Host string
Port int
MaxNum int
}
type Option func(cfg *Config)
func WithHost(host string) Option {
return func(cfg *Config) {
cfg.Host = host
}
}
func WithPort(port int) Option {
return func(cfg *Config) {
cfg.Port = port
}
}
func WithMaxNum(maxNum int) Option {
return func(cfg *Config) {
cfg.MaxNum = maxNum
}
}
func NewConfig(options ...Option) Config {
cfg := Config{}
for _, option := range options {
option(&cfg)
}
return cfg
}
func main() {
cfg := NewConfig(
WithHost("127.0.0.1"),
WithPort(80),
WithMaxNum(10),
)
fmt.Printf("cfg:%+v", cfg)
}
以后需要增加配置参数,只需加上对应参数的with方法即可。