为了账号安全,请及时绑定邮箱和手机立即绑定

Golang struct 构造的一般性

Golang struct 构造的一般性

Go
www说 2021-09-27 21:25:21
我有一个其他两个对象实现的结构。在这种情况下,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 实现中使用的初始化样式),那么您可能会发现仅凭这一点就足以满足您的需要。


查看完整回答
反对 回复 2021-09-27
?
手掌心

TA贡献1942条经验 获得超3个赞

您可以使用初始化代码编写一个函数:


func newDbRepo(foo, bar string) dbRepo {

        // ...

}

然后你可以将它与类型转换一起使用:


a := typeARepo(newDbRepo("foo", "bar"))

b := typeBRepo(newDbRepo("foo", "bar"))


查看完整回答
反对 回复 2021-09-27
  • 3 回答
  • 0 关注
  • 250 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信