登录
首页 >  Golang >  Go问答

导入的接口无法使用,提示缺少方法,但方法确实存在

来源:stackoverflow

时间:2024-02-15 15:36:24 327浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《导入的接口无法使用,提示缺少方法,但方法确实存在》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我无法使用从另一个包导入的界面,并且不确定我应该做什么。示例代码:

var inner types.txdata // <-- interface imported from types package
inner = &internaltx{
        chainid: (*big.int)(dec.chainid),
        data:    *dec.data,
    }

在接口中列出的所有方法中,有 1 种方法不被接受: func (tx *internaltx) accesslist() types.accesslist { return nil }

go 抱怨 internaltx 没有实现 accesslist() 来满足 types.txdata 接口,但是如果我将 accesslist() 大写为 accesslist() 那么我会收到另一个抱怨:​​

有 accesslist() 类型.accesslist 想要 accesslist() types.accesslist

所以我很困惑我需要在这里做什么?

编辑:

我还根据最近的建议实施了以下内容:

type TxData struct {
    types.TxData
}
var inner TxData

internalTx := &InternalTx{
ChainId: (*big.Int)(dec.ChainID),
        Data:    *dec.Data,
}
inner = TxData{TxData: internalTx}

问题仍然存在。


正确答案


如果使用未导出的方法声明接口(例如 accesslist),则无法在另一个包中实现该接口,因为该名称未导出。这是强制您使用原始包中的实现的常见方法。

解决这个问题的一种方法是嵌入该接口,然后将功能委托给它的实现:

type TxData struct {
   types.TxData
}

someImplementation:=// Get an implementation of types.TxData
inner:=TxData{TxData: someImplementation}

这将使用 someimplementationaccesslist

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《导入的接口无法使用,提示缺少方法,但方法确实存在》文章吧,也可关注golang学习网公众号了解相关技术文章。

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