【问题标题】:Cannot use struct that implements interface [duplicate]无法使用实现接口的结构[重复]
【发布时间】:2019-04-03 11:48:28
【问题描述】:

代码:

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

struct implementationdata 接口实现方法getData()。在run 方法中使用implementation 的一部分还不够吗?

我的推理哪里错了?

【问题讨论】:

标签: go


【解决方案1】:

这似乎违反直觉,但 []data[]implementation 的类型不同,因为切片类型在 Go 中是如何表示的。

这个其实在Go Wiki里讨论过

编辑:考虑一下

var impl []*implementation
var data []data = impl

编译器会抱怨

cannot use impl (type []*implementation) as type []data in assignment

这是更多代码,但实际上您必须按照该线程中的 cmets 的建议创建界面的一部分,如下所示:

var impl []*implementation
var data []data

// assuming impl already has values
for _, v := range impl {
    data = append(data, v)
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-13
    • 2014-01-10
    • 1970-01-01
    • 1970-01-01
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多