В следующем фрагменте кода -
type Input interface {
Name() string
}
type Abc interface {
Do(Input)
}
type InputImpl struct {
}
func (InputImpl) Name() string {
return "sample-impl"
}
type AbcImpl struct {
}
func (abcImpl *AbcImpl) Do(input Input){
// do something
}
AbcImpl
struct представляет собой реализацию интерфейса Abc
, но изменяет последнюю функцию следующим образом -
func (abcImpl *AbcImpl) Do(input InputImpl){
// do something
}
Теперь AbcImpl
больше не реализует Abc
, хотя InputImpl
реализует интерфейс Input
!
Я что-то упустил или обязательно иметь точно такую же сигнатуру (не событие Impls) в качестве интерфейса для законной реализации?