为了账号安全,请及时绑定邮箱和手机立即绑定

不能使用实现接口的结构

不能使用实现接口的结构

Go
暮色呼如 2023-05-04 17:15:31
代码:package mainimport "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我的推理哪里错了?
查看完整描述

1 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

这似乎违反直觉,但由于切片类型在 Go 中的表示方式[]data而属于不同类型。[]implementation

考虑这个

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)

}


查看完整回答
反对 回复 2023-05-04
  • 1 回答
  • 0 关注
  • 62 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信