Golang struct 构造的一般性

我有一个其他两个对象实现的结构。在这种情况下,typeA 和 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) {

    ...

}


www说
浏览 251回答 3
3回答

肥皂起泡泡

我个人在 Go 中观察到的实践(这也是有效 Go 或 Go 入门教程中推荐的)只是定义一个NewdbRepo函数并将其用于所有实例化。它的实现看起来像;func NewdbRepo(f, b string) *dbRepo {    return &dbRepo{ foo:f, bar:b}}您实际上无法像在大多数类似 C 的语言中那样定义构造函数,因此您只需要提供一个包范围的方法来为您进行构造。此外,如果您不使用复合文字(我在 NewdbRepo 实现中使用的初始化样式),那么您可能会发现仅凭这一点就足以满足您的需要。

手掌心

您可以使用初始化代码编写一个函数:func newDbRepo(foo, bar string) dbRepo {        // ...}然后你可以将它与类型转换一起使用:a := typeARepo(newDbRepo("foo", "bar"))b := typeBRepo(newDbRepo("foo", "bar"))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go