不能使用实现接口的结构

代码:


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实现方法。只用一片in方法还不够吗?getData()dataimplementationrun


我的推理哪里错了?


暮色呼如
浏览 86回答 1
1回答

BIG阳

这似乎违反直觉,但由于切片类型在 Go 中的表示方式[]data而属于不同类型。[]implementation考虑这个var impl []*implementationvar data []data = impl编译器会抱怨cannot use impl (type []*implementation) as type []data in assignment这是更多的代码,但实际上您必须按照该线程中的评论所建议的那样创建界面的一部分,如下所示:var impl []*implementationvar data []data// assuming impl already has valuesfor _, v := range impl {    data = append(data, v)}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go