程序开发 · 2024年1月18日

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的相关知识,请关注公众号!