当前位置: > > > > Go接口:尽管接口已实现,但尚未实现
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的相关知识,请关注米云公众号!
