我有三个文件:
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
}