go - 有没有办法返回实现结构而不是 Go 中的接口(interface)?

标签 go

我想构建一个可以针对系统的不同应用进行扩展的系统。

在域包中,我有一个如下界面:

package main

type CardInterface interface {
 GetName()string
}

type DeckInterface interface {
 GetCards()[]CardInterface
}

在应用程序包中,我有以下实现:

package implementation
//Implementing CardInterface
type Card struct {
  Name string
}

func (c Card) GetName() string {
  return c.Name
}


type Deck struct {
  Cards []Card
}


func (d Deck) GetCards() []CardInterface {
  return d.Cards[]
}

但它给出了一个错误,说不能返回 []Card 的实例而不是 []CardInterface .

有没有办法在 Go 中实现这种 OOP 结构?如果不是,我怎样才能实现这种扩展能力?

最佳答案

如果要保留 Deck类型定义(如果没有,请查看 Shadowchaser's answer ),您可以尝试以下操作:

func (d Deck) GetCards() []CardInterface {
  var res []CardInterface
  for _ , card := range d.Cards {
    res = append(res, card)
  }
  return res
}

您需要重新 slice Deck因为,而 CardCardInterface , 一个 []Card不是 []CardInterface .

关于go - 有没有办法返回实现结构而不是 Go 中的接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61301528/

相关文章:

go - 新来的, parent 的解释

来自 bytes.Reader 的 Golang un-gzip

go - 分析 Golang 服务器

map - 在goLang中用函数指针值声明映射

Go,用值(value)理解上下文

struct - 如何在 slice 内设置结构的字段?

Go lang, channel 处理顺序

mongodb - 防止 bson.ObjectIdHex 中的运行时 panic

golang autocert acme/autocert : missing server name

go - 如何在二叉树中所有节点的先前父级都符合条件的二叉树中搜索(可能有多个)节点?