gpt4 book ai didi

go - 向构造函数添加可变参数时如何在 Go 中进行版本控制?

转载 作者:行者123 更新时间:2023-12-04 15:19:22 24 4
gpt4 key购买 nike

我认为将可变参数函数添加到常规函数或方法是基于 this post 的破坏性更改.但是如何将可变参数添加到构造函数中呢?喜欢添加 Functional Options .

通过使用 semver,这段代码是 v1.0.0

type Foo struct{}

// constructor with default behavior
func NewFoo() *Foo {
return &Foo{}
}

添加可变参数

type Foo struct{}

type Option func(&Foo)

// constructor with option
func NewFoo(opts ...Option) *Foo {
// process option before return
// ...
return &Foo{}
}

旧代码在调用构造函数时仍然很好,没有人将构造函数分配给变量并将构造函数传递给另一个函数,如 in this case .

那么,在上面的代码中,我应该将主要版本增加到 v2.0.0 还是将次要版本增加到 v1.1.0?

最佳答案

我认为两者都可以,因为这是一个灰色地带。原则上你破坏了向后兼容性,因为函数的签名发生了变化,但实际上调用者不太可能受到影响。

这相当于将字段添加到结构中,该结构对新字段具有合理的默认零值解释。使用这些结构的代码可能会有不同的行为(例如,如果它们查看结构的大小,或者如果它们使用反射),但将此称为重大更改是不务实的,除非您期望人们正在做这些边缘情况东西。

关于go - 向构造函数添加可变参数时如何在 Go 中进行版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60014045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com