Интерфейс с методом, у которого параметр interface {} не работает - PullRequest
0 голосов
/ 05 апреля 2019

Я пытаюсь реализовать некоторые интерфейсы в Go.

У меня есть InterfaceA:

type InterfaceA interface{
    read(interface{}) string
}

У меня есть InterfaceB:

type InterfaceB interface{
    fetch()
}

У меня естьfunction:

func Read(a InterfaceA) {}

У меня есть StructA, который удовлетворяет InterfaceA через свои методы, но вместо переменной "interface {}" ему передается InterfaceB как таковой:

type StructA struct {}

func (a *StructA) read(b InterfaceB) string {
    resp := b.fetch()
    return resp
}

Кажется, это работает для моих модульных тестов, но когда я импортирую пакет, я получаю сообщение об ошибке, утверждающее, что InterfaceA не реализован правильно, потому что он ожидает «read (interface {})» not «read (InterfaceB)».Ошибка:

StructA does not implement InterfaceA (wrong type for read method)
have read(InterfaceB) string
want read(interface {}) string

Причина, по которой я пытаюсь передать интерфейс функции read (), заключается в том, что я могу смоделировать метод "i.fetch ()", но все же протестировать остальную частьФункция read ().

Я также не могу передать метод чтения StructA параметром интерфейса (например, read(b interface{}), потому что тогда b не будет иметь метод fetch().

Я делаю это неправильно? Я думал, что это работает, так как мои модульные тесты работают. Я только столкнулся с проблемой при импорте пакета.

1 Ответ

0 голосов
/ 05 апреля 2019

спасибо за комментарии.Мне удалось заставить это работать через утверждения типа типа.Более подробную информацию можно найти здесь: golang.org/ref/spec#Type_assertions

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...