无法使用实现接口的结构

时间:2018-10-30 12:24:34

标签: go

代码:

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的新手,我不明白为什么会这样?

结构implementationgetData()接口实现方法data。在implementation方法中使用一片run还不够吗?

我的推理错了吗?

1 个答案:

答案 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)
}