登录
首页 >  Golang >  Go问答

Go接口:尽管接口已实现,但尚未实现

来源:stackoverflow

时间:2024-04-22 10:48:35 288浏览 收藏

一分耕耘,一分收获!既然都打开这篇《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
}

演示:https://play.golang.org/p/TmGcBpUQzGs

本篇关于《Go接口:尽管接口已实现,但尚未实现》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>