代码:package mainimport "fmt"type implementation struct { d []int}func (impl *implementation) getData() interface{} { return impl.d}type phase struct{}type data interface { getData() interface{}}func MakeIntDataPhase() *phase { return &phase{}}func (p *phase) run(population []data) []data { return nil}func main() { var population []implementation MyPhase := MakeIntDataPhase() fmt.Println(MyPhase.run(population))}在操场上运行以下代码时出现以下错误:prog.go:30:25: cannot use population (type []implementation) as type []data in argument to MyPhase.run我是 golang 的新手,我不明白为什么会这样?结构从接口implementation实现方法。只用一片in方法还不够吗?getData()dataimplementationrun我的推理哪里错了?
1 回答
BIG阳
TA贡献1859条经验 获得超6个赞
这似乎违反直觉,但由于切片类型在 Go 中的表示方式[]data
而属于不同类型。[]implementation
考虑这个
var impl []*implementation
var data []data = impl
编译器会抱怨
cannot use impl (type []*implementation) as type []data in assignment
这是更多的代码,但实际上您必须按照该线程中的评论所建议的那样创建界面的一部分,如下所示:
var impl []*implementation
var data []data
// assuming impl already has values
for _, v := range impl {
data = append(data, v)
}
- 1 回答
- 0 关注
- 85 浏览
添加回答
举报
0/150
提交
取消