Golang интерфейсы для упрощения зависимостей?
Хм, у меня проблема с обертыванием интерфейсов.
Поэтому я использую пакет Go для обработки своих материалов mongodb, но я не хочу импортировать этот пакет в каждую модель, а что нет. Я хотел бы сохранить как можно больше моих подпакетов (например, моделей) только в стандартной библиотеке. Поэтому я подумал, что выложу некоторые интерфейсы примерно так:
type m map[string]interface{}
type collectionSlice interface {
One(interface{}) error
}
type collection interface {
Upsert(interface{}, interface{}) (interface{}, error)
Find(interface{}) collectionSlice
}
type database interface {
C(string) collection
}
Проблема в том, что когда я иду использовать такую функцию, как:
func FindItem(defindex int, d database) (*Item, error) {
это найдено в пакете, который использует интерфейсы, передав в мою базу данных mgo.Database:
item, err := dota.FindItem(int(defindex), ctx.Database)
Я получаю ошибку компилятора:
controllers / handlers.go: 35: нельзя использовать ctx.Database (тип *mgo.Database) в качестве типа dota.database в аргументе функции: *mgo.Database не реализует dota.database (неправильный тип для метода C), имеет C(строку)) *mgo.Collection хочу C(строка) dota.collection
Что мне не хватает в этой концепции?
1 ответ
Получил ответ на этот ответ по голангам.
У меня проблема в том, что методы должны иметь одинаковую подпись: http://golang.org/doc/faq
Благодаря Джесси Макнелису в группе голангерских орехов!