[英]Golang how to implement Interface in Generic
我尝试学习 Go 通用,看看它是如何工作的,但我遇到了一些困惑的问题,如下所示: 我有一个通用定义如下:
type Interface interface {
Less(d any) bool
}
type DLinkedList[T Interface] struct {
head *Node[T]
tail *Node[T]
}
type Node[T Interface] struct {
prev *Node[T]
next *Node[T]
val T
}
func (dl *DLinkedList[T]) Insert(val ...T) {
if dl.head == nil {
dl.head = &Node[T]{val: val[0]}
dl.tail = dl.head
val = val[1:]
}
for _, val := range val {
dl.tail.next = &Node[T]{val: val}
dl.tail.next.prev = dl.tail
dl.tail = dl.tail.next
}
}
func (dl *DLinkedList[T]) Sort() {
front := dl.head
var back *Node[T] = nil
for front != nil {
back = front.next
for back != nil && back.prev != nil && back.val.Less(back.prev.val) {
back = back.prev
}
front = front.next
}
}
现在使用我的通用如下:
type MyTest struct {
Name string
Age int
}
func (this MyTest) Less(d MyTest) bool { return this.Age < d.Age }
func main() {
dl := DLinkedList[MyTest]{}
dl.Insert(MyTest{Name: "yx", Age: 12})
}
但是构建失败,错误:
MyTest does not implement Interface (wrong type for Less method)
have Less(d MyTest) bool
want Less(d any) bool
所以问题是任何类型都不能接受我的结构。 我错过了什么? 大家有什么想法,请提供一些线索提前谢谢
MyTest 上的方法仅接受 MyTest 值作为输入,而您的界面指定它必须具有“任何”作为输入
类型上的方法需要与要用作接口的接口定义的方法相同
@Pizza lord 非常感谢,我通过这样的更改来解决这个问题:
从:
func (this MyTest) Less(d MyTest) bool { return this.Age < d.Age }
至:
func (this MyTest) Less(d any) bool { return this.Age < d.(MyTest).Age }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.