无法使用从另一个pkg导入的接口,说方法不见了,但它在那里



我无法使用从另一个包导入的接口,也不确定该怎么做。示例代码:

var inner types.TxData // <-- interface imported from types package
inner = &InternalTx{
ChainId: (*big.Int)(dec.ChainID),
Data:    *dec.Data,
}

在接口中列出的所有方法中,有一种方法不被接受:func(tx*InternalTx(accessList((类型。AccessList{return nil}

Go抱怨InternalTx没有实现accessList((来满足类型。TxData接口,但如果我将accessList((大写为accessList((,那么我会收到另一个投诉,称:

具有AccessList((类型。访问列表需要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

相关内容

最新更新