当前位置: > > > > Go接口:尽管接口已实现,但尚未实现
来源:stackoverflow
2024-04-22 10:48:35
0浏览
收藏
一分耕耘,一分收获!既然都打开这篇《Go接口:尽管接口已实现,但尚未实现》,就坚持看下去,学下去吧!本文主要会给大家讲到等等知识点,如果大家对本文有好的建议或者看到有不足之处,非常欢迎大家积极提出!在后续文章我会继续更新Golang相关的内容,希望对大家都有所帮助!
问题内容
有人可以向我解释一下为什么go中不允许这种实现吗? 我有一个函数,它将定义该函数的接口作为参数。这会引发错误。
package main import ( "fmt" ) type Anode int func (a Anode) IsLess(node Anode) bool { return a < node } type Node interface { IsLess(node Node) bool } func test(a, b Node) bool { return a.IsLess(b) } func main() { a := Anode(1) b := Anode(2) fmt.Println(test(a, b)) }
解决方案
签名不相同。参数类型不同:
isless(node) bool // interface argument type is `node` isless(anode) bool // method argument type is `anode`
要解决此问题 – 更改方法以使用参数类型 node
。 然后,您需要一个 value()
方法将 anode
转换为可比较的类型(例如 int
):
func (a anode) isless(node node) bool { return a.value() < node.value() } func (a anode) value() int { return int(a) }
并将其添加到您的接口定义中:
type Node interface { IsLess(node Node) bool Value() int // <-- add this }
演示:
本篇关于《Go接口:尽管接口已实现,但尚未实现》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注公众号!