2017-01-31 10 views
1

Как вы встраиваете два типа одинакового имени в структуру? Например:Вставить две структуры с тем же именем в структуре

type datastore { 
    *sql.Store 
    *file.Store 
} 

Результаты duplicate field Store. Я знаю, что это имеет смысл, так как вы не сможете ссылаться на встроенное поле ds.Store, но как вы это сделаете?

Чтобы уточнить, я хочу реализовать интерфейс с datastore. Для этого необходимы две структуры, поскольку их методы дополняют друг друга, чтобы создать интерфейс. Какие у меня перемены?

+0

Не могли бы вы разработать немного о том, как методы этих встроенных strutcts дополняют друг друга точно? – kostix

ответ

4

Вы можете попробовать первый обернуть whatever.Store в различных названных типов:

import (
    "os" 
    "whatever/sql" 
) 

type SqlStore struct { 
    *sql.Store 
} 

type FileStore struct { 
    *os.File 
} 

type DataStore struct { 
    SqlStore 
    FileStore 
} 

Playground link.

Заметим, что Go 1.9 может получить поддержку псевдонимов типов: см. this и this. Я не уверен, что это поможет в вашем случае, но может быть интересно узнать.

1

Вы действительно можете ссылаться на поле, даже если он присутствует в двух различных подструктур включены как анонимные поля:

package main 

import "fmt" 

type A struct { 
    x int32 
} 

type B struct { 
    x int32 
} 

type C struct { 
    A 
    B 
} 

func main() { 
    c := C{A{1}, B{2}} 
    //fmt.Println(c.x) // Error, ambiguous 
    fmt.Println(c.A.x) // Ok, 1 
    fmt.Println(c.B.x) // Ok, 2 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^