В 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
Используйте комментарии документирование функций, чтобы предоставить пользователю руководство относительно того, какую функцию использовать. Например, возможно, функция NewFoo
устарела в пользу функции NewFooOpts
.
Никто не назначает конструктор переменной и не передает конструктор другой функции.
Поскольку кто-то это делает, утверждение ложно.