Cannot use struct that implements interface
本问题已经有最佳答案,请猛点这里访问。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | package main import"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)) } |
在操场上运行以下代码时,出现以下错误:
我刚到歌朗,不明白为什么会这样?
结构
我的推理哪里错了?
这似乎与直觉相反,但由于切片类型在go中的表示方式,
这实际上在Go wiki中讨论过
编辑:考虑这个
1 2 | var impl []*implementation var data []data = impl |
编译器会抱怨
1 | cannot use impl (type []*implementation) as type []data in assignment |
号
这是更多的代码,但实际上您必须创建一个接口切片,正如这个线程中的注释所建议的那样,比如:
1 2 3 4 5 6 7 | var impl []*implementation var data []data // assuming impl already has values for _, v := range impl { data = append(data, v) } |