2 回答
TA贡献1847条经验 获得超7个赞
在 Go 中,我应该将主要版本增加到 v2.0.0 还是将次要版本增加到 v1.1.0?
在 Go 中,NewFoo函数类型
v1.0.0:
type Foo struct{}
func NewFoo() *Foo {}
和
v2.0.0:
type Foo struct{}
type Option func(*Foo)
func NewFoo(opts ...Option) *Foo { }
是不同的类型。这使它成为一项重大更改,即对主要版本号的更新。
但是,这并不是真正的重大更改,只是一个扩展,因此请更新次要版本号。使用相似但不同的函数名称。例如,NewFoo和NewFooOpts。
v1.1.0:
type Foo struct{}
func NewFoo() *Foo {
return NewFooOpts()
}
type Option func(*Foo)
func NewFooOpts(opts ...Option) *Foo {
var foo Foo
for _, opt := range opts {
// handle opt
_ = opt
}
return &foo
}
游乐场: https: //play.golang.org/p/HcN1WCi0YK4
使用记录功能的注释向用户提供有关使用哪个功能的指导。例如,也许 functionNewFoo已被弃用,取而代之的是 function NewFooOpts。
没有人将构造函数分配给变量并将构造函数传递给另一个函数。
由于有人这样做,因此该陈述是错误的。
TA贡献1780条经验 获得超5个赞
我认为两者都可以,因为这是一个灰色地带。原则上,您破坏了向后兼容性,因为函数的签名发生了变化,但实际上调用者不太可能受到影响。
它类似于将字段添加到对新字段具有合理的默认零值解释的结构。使用这些结构的代码可能表现不同(例如,如果他们查看结构的大小,或者如果他们使用反射),但将其称为重大更改是不切实际的,除非您希望人们在做这些边缘情况事物。
- 2 回答
- 0 关注
- 94 浏览
添加回答
举报