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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:golang函数参数默认值-创新互联
网站地址:http://azwzsj.com/article/jscih.html