Я пытаюсь реализовать некоторые интерфейсы в 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()
.
Я делаю это неправильно? Я думал, что это работает, так как мои модульные тесты работают. Я только столкнулся с проблемой при импорте пакета.