Golang结构体构造通用性

use*_*831 3 go

我有一个由另外两个对象实现的结构。在本例中,类型 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)

eva*_*nal 5

我个人在 Go 中观察到的做法(这也是有效的 Go 或 Go 入门教程中推荐的做法)就是定义一个NewdbRepo函数并将其用于所有实例化。它的实现看起来像这样;

func NewdbRepo(f, b string) *dbRepo {
    return &dbRepo{ foo:f, bar:b}
}
Run Code Online (Sandbox Code Playgroud)

您实际上无法像在大多数类似 C 的语言中那样定义构造函数,因此您只需提供一个包范围的方法来为您进行构造。另外,如果您不使用复合文字(我在 NewdbRepo 实现中使用的初始化样式),那么您可能会发现它足够简洁,足以满足您的需求。