我无法使用从另一个包导入的接口,也不确定该怎么做。示例代码:
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}
这将使用someImplementation
的accessList
。