在一个结构体中嵌入两个同名结构体

Mah*_*oni 4 inheritance struct interface go

如何在结构中嵌入两种类型的同名?例如:

type datastore {
    *sql.Store
    *file.Store
}
Run Code Online (Sandbox Code Playgroud)

结果在duplicate field Store. 我知道这是有道理的,因为您将无法引用嵌入式字段,ds.Store但无论如何您如何完成此操作?

澄清一下,我想用datastore. 为此,需要两个结构体,因为它们的方法相互补充以创建接口。我有什么替代品?

mat*_*tes 9

使用类型别名,例如:

type sqlStore = sql.Store // this is a type alias

type datastore {
    *sqlStore
    *file.Store
}
Run Code Online (Sandbox Code Playgroud)

类型别名不会创建与创建它的类型不同的新的不同类型。它只是sqlStore为由 表示的类型引入了一个别名,一种替代拼写sql.Store


kos*_*tix 5

您可以尝试首先将您的包装whatever.Store成不同名称的类型:

import (
    "os"
    "whatever/sql"
)

type SqlStore struct {
    *sql.Store
}

type FileStore struct {
     *os.File
}

type DataStore struct {
     SqlStore
     FileStore
}
Run Code Online (Sandbox Code Playgroud)

游乐场链接

请注意,Go 1.9 可能会获得对类型别名的支持:请参阅thisthis。我不确定这对你的情况有帮助,但了解一下可能会很有趣。