Go 接口和实现

Go 接口和实现,go,interface,Go,Interface,在下面的代码段中- 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){

在下面的代码段中-

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)作为合法实现?

在Go中实现接口时,必须使用完全相同的签名。否则无法实现它。

是的,必须遵循指定的方法签名。 如果您不遵循签名,它将不会被称为“执行”

例如:

从围棋之旅:
没有明确的意图声明,没有“implements”关键字。



是的,必须有完全相同的签名。有什么原因让你这样定义它吗?@bereal好的,我试图在我的代码中的某个地方创建一个工厂,在那里我发现了这个问题。请注意,这在任何语言中都不起作用,因为现在Do不能再接受所有类型的输入,但这是Abc接口所要求的。这是我提出问题后不久就意识到的:)