我有三个文件:

node.go:

type Node interface {
    AMethod(arg ArgType) bool
    BMethod() bool
}

node.go:
type aNode struct {}

func AMethod(aNode ANode, arg ArgType) bool {
    return true
}

func BMethod(aNode ANode) bool {
    return true
}

bnode.go:
type bNode struct {}

func AMethod(bNode BNode, arg ArgType) bool {
    return true
}

func BMethod(bNode BNode) bool {
    return true
}

但是我得到了错误:
Nodes/bnode.go:16:58: AMethod redeclared in this block
    previous declaration at Nodes/anode.go:15:58
Nodes/bnode.go:20:60: BMethod redeclared in this block
    previous declaration at Nodes/anode.go:19:60

如何在此处有效实现接口(interface)?

最佳答案

声明一个接受某种类型的函数并不会使该函数成为该类型的method set的一部分(这意味着它不能帮助该类型满足特定的接口(interface))。

相反,您需要对declare a function as a method使用正确的语法,如下所示:

type BNode struct {}

func (ANode) AMethod(arg ArgType) bool {
    return true
}

func (ANode) BMethod() bool {
    return true
}

type BNode struct {}

func (BNode) AMethod(arg ArgType) bool {
    return true
}

func (BNode) BMethod() bool {
    return true
}

10-06 08:52