Skip to main content

golang 选项模式

· 2 min read
Czasg

在 golang 开发过程中,可能会遇到这么一种问题:参数过多,当希望将参数配置成可选的模式。

在其他语言中有不同的解决方法,比如 python 就支持默认参数,可以很好的处理这个问题。
在 golang 中也有一种选项模式,可以比较友好的处理这类问题。

选项模式

选项模式的主要流程是:初始化一个默认参数,然后提供可变参数,这些参数可以针对性的修改此默认参数,最终得到目标参数。

type MyFuncOption func(options *MyFuncOptions)

func WithOptionStr1(str1 string) MyFuncOption {
return func(options *MyFuncOptions) {
options.optionStr1 = str1
}
}

func WithOptionInt1(int1 int) MyFuncOption {
return func(options *MyFuncOptions) {
options.optionInt1 = int1
}
}

func WithOptionStr2AndInt2(str2 string, int2 int) MyFuncOption {
return func(options *MyFuncOptions) {
options.optionStr2 = str2
options.optionInt2 = int2
}
}

func NewIns(options ...MyFuncOption) {
defaultOptions := Options{}
for _, f := range options {
f(&defaultOptions)
}
}

常见方法

这类参数的选择起始比较自由,一般选项模式适用于参数量较多的场景,当参数较少时,不妨直接匹配选项

type Opt int

const (
OptEnv Opt = 1 << iota
OptDefault
OptSilent // ignore err and iterate over all fields.
)

func NewIns(opts ...Opt) {
var opt Opt = 0
for _, o := range opts {
opt = opt | o
}
}

👇👇👇

本文作者: Czasg
版权声明: 转载请注明出处哦~👮‍