【发布时间】:2016-04-10 07:51:24
【问题描述】:
不知何故,在运行时,我收到以下 panic 消息,即使在我看来该方法已正确定义为实现该接口的结构。
panic: interface conversion: schema.MerchantResultset
is not search.ResultsetInterface: missing method Add
这是界面蓝图
type ResultsetInterface interface {
Init(string)
CacheSet(context.Context) error
CacheSetPart(context.Context, int) error
CacheGet(context.Context, string) error
Add(interface{})
AddResultset(interface{})
}
下面是运行时报missing的方法,分配给我的struct MerchantResultset。
func (mr *MerchantResultset) Add(item interface{}) {
mr.Data = append(mr.Data, item.(Merchant))
}
我不知何故非常困惑,试图了解这里实际需要什么
【问题讨论】:
-
同意 Roland lllig 的回答。您的恐慌报告
schema.MerchantResultset没有实现该方法,这是真的,因为 Add 方法具有指针接收器。你需要传递&MerchantResultset{},而不是MerchantResultset{}。 -
不知何故,这两个选项仍然会产生同样的恐慌:1) item := schema.Merchant{}; resultSet.Add(item) 2) item := schema.Merchant{};结果集.Add(&item)
-
所以基本上这意味着唯一的实现者是 func (mr MerchantResultset) Add(item interface{}) ?
-
您误会了,请看一下pointer receiver and non-pointer receiver 之间的区别以及如何初始化它们。基本上你需要做
item := &schema.Merchant{}让它实现接口。
标签: go