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

Благодаря Джесси Макнелису в группе голангерских орехов!

Другие вопросы по тегам