我有一个由另外两个对象实现的结构。在本例中,类型 A 和 B 存储库。有一些初始化代码,这里用省略号表示。初始化代码在两个构造函数之间完全重复,当我只有两个时,这没什么大不了的dbRepo,但是当我创建更多时,我会更加担心这种不好的做法。有什么方法可以用接口来概括这一点吗?
type dbRepo struct {
foo string
bar string
}
type typeARepo dbRepo
type typeBRepo dbRepo
func newTypeARepo(foo, bar string) {
...
}
func newTypeBRepo(foo, bar string) {
...
}
Run Code Online (Sandbox Code Playgroud)
我个人在 Go 中观察到的做法(这也是有效的 Go 或 Go 入门教程中推荐的做法)就是定义一个NewdbRepo函数并将其用于所有实例化。它的实现看起来像这样;
func NewdbRepo(f, b string) *dbRepo {
return &dbRepo{ foo:f, bar:b}
}
Run Code Online (Sandbox Code Playgroud)
您实际上无法像在大多数类似 C 的语言中那样定义构造函数,因此您只需提供一个包范围的方法来为您进行构造。另外,如果您不使用复合文字(我在 NewdbRepo 实现中使用的初始化样式),那么您可能会发现它足够简洁,足以满足您的需求。