Functional Option 是指在创建对象时(比如 NewXX()
函数),提供一个可变的函数列表参数作为选项。下面给出一个例子:
定义:
// options 表示 NewConfigStore 的可选参数。
type options struct {
appID string
}
// Option 是 NewConfigStore 的函数式参数类型。
type Option func(options *options) error
// WithAppID 设置 NewConfigStore 的 appID 参数。如果没有使用这个参数,NewConfigStore
// 会使用 DefaultAppID() 函数的返回值作为 appID 参数。
func WithAppID(appID string) Option {
return func(options *options) error {
if appID == "" {
return fmt.Errorf("appID is empty")
}
options.appID = appID
return nil
}
}
func NewConfigStore(opts ...Option) (*ConfigStore, error) {
var options options
for _, opt := range opts {
err := opt(&options)
if err != nil {
return nil, err
}
}
// 使用 options 做初始化……
}
使用:
// 不需要自定义 appID 时
store := NewConfigStore()
// 需要自定义 appID 时
store := NewConfigStore(WithAppID("my-appid"))