代码:
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))
}
在操场上运行以下代码时,出现以下错误:prog.go:30:25: cannot use population (type []implementation) as type []data in argument to MyPhase.run
我是golang的新手,我不明白为什么会这样?
结构implementation
从getData()
接口实现方法data
。在implementation
方法中使用一片run
还不够吗?
我的推理错了吗?
答案 0 :(得分:2)
这似乎是违反直觉的,但是[]data
与[]implementation
的类型不同,因为在Go中如何表示切片类型。
这实际上是在Go Wiki
中讨论的编辑:考虑一下
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)
}