您的界面定义没有任何问题。问题是你没有正确转换
[]Hammer
至
[]HammerInterface
。看起来你希望这会神奇地发生,但事实并非如此。
在这段代码中:
func (t Toolbox) GetHammers() []HammerInterface {
return []HammerInterface{t.Hammers}
}
</code>
您可能期望返回的结果是3的切片
HammerInterface
s,但相反,你得到一个单一的
HammerInterface
,实际上是三分之一
Hammers
秒。
您必须手动执行此转换。看到
这个帖子
更多细节。
func (t Toolbox) GetHammers() []HammerInterface {
hammerInterfaces := make([]HammerInterface, len(t.Hammers))
for i, hammer := range t.Hammers {
hammerInterfaces[i] = t.Hammers[i]
}
return hammerInterfaces
}
</code>
在大多数现实场景中,编译器会捕获您的错误,因为您的锤子片(
t.Hammers
)不满足
HammerInterface
接口,但在您的情况下,由于该接口为空,它匹配
随便哪种
,作为
interface{}
将。