golang函数参数默认值

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,无

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值