重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1,参考资料:Functional Options in Go: Implementing the Options Pattern in Golang
成都创新互联专注于米脂企业网站建设,成都响应式网站建设公司,商城网站制作。米脂网站建设公司,为米脂等地区提供建站服务。全流程专业公司,专业设计,全程项目跟踪,成都创新互联专业和态度为您提供的服务2,例子:求a,b,c的和
// go 函数参数没有默认值的语法,那我此时想给b添加默认值该怎么办?
func sum(a int, b int, c int) int {
return a + b + c
}
// 还有很多方法可以做到,但是我还是喜欢这种
// 定义包含全部参数的 struct
type Params struct {
a int
b int
c int
}
// 定义一个函数签名
type ParamsOption func(*Params)
// 针对每个成员实现上面的签名
func WithA(a int) ParamsOption {
return func(Params *Params) {
Params.a = a
}
}
func WithB(b int) ParamsOption {
return func(Params *Params) {
Params.b = b
}
}
func WithC(c int) ParamsOption {
return func(Params *Params) {
Params.c = c
}
}
// 很多开源项目用的都是此类方式。。。
// 构造 参数结构体 Params
func NewParams(options ...ParamsOption) *Params {
// 这里就是默认值了
const (
a = 0
b = 0
c = 0
)
x := &Params{
a: a,
b: b,
c: c,
}
for _, o := range options {
o(x) // 这里就是在改你的默认值了
}
return x
}
// 那要怎么使用?
// 先改一下例子吧
func sum(params *Params) int {
return params.a + params.b + params.c
}
// 然后可以这么用
// 你传递哪个With函数就会修改哪个默认值执行操作
Sum := sum(
NewParams(
WithA(1),
WithB(2),
WithC(3),
)
)
// 结束了
3,无
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧