我有一个其他两个对象实现的结构。在这种情况下,typeA 和 B 回购。有一些初始化代码,这里用省略号表示。初始化代码在两个构造函数之间完全重复,虽然我只有两个dbRepo,但这没什么大不了的,但是当我创建更多时,我会更加担心这种不好的做法。有没有办法用接口来概括这一点?type dbRepo struct { foo string bar string}type typeARepo dbRepotype typeBRepo dbRepofunc newTypeARepo(foo, bar string) { ...}func newTypeBRepo(foo, bar string) { ...}
3 回答
肥皂起泡泡
TA贡献1829条经验 获得超6个赞
我个人在 Go 中观察到的实践(这也是有效 Go 或 Go 入门教程中推荐的)只是定义一个NewdbRepo函数并将其用于所有实例化。它的实现看起来像;
func NewdbRepo(f, b string) *dbRepo {
return &dbRepo{ foo:f, bar:b}
}
您实际上无法像在大多数类似 C 的语言中那样定义构造函数,因此您只需要提供一个包范围的方法来为您进行构造。此外,如果您不使用复合文字(我在 NewdbRepo 实现中使用的初始化样式),那么您可能会发现仅凭这一点就足以满足您的需要。
手掌心
TA贡献1942条经验 获得超3个赞
您可以使用初始化代码编写一个函数:
func newDbRepo(foo, bar string) dbRepo {
// ...
}
然后你可以将它与类型转换一起使用:
a := typeARepo(newDbRepo("foo", "bar"))
b := typeBRepo(newDbRepo("foo", "bar"))
- 3 回答
- 0 关注
- 250 浏览
添加回答
举报
0/150
提交
取消