切片结构无法插入golang中的接口切片

时间:2018-11-09 03:46:21

标签: go

我有Tag结构和TableAbstruct接口,如下例所示。

[标签结构]

type Tag struct {
    Id   int    `db:"id"`
    Name string `db:"Name"`
}
func (tag Tag) Serialize() []string {
    ...
}

[TableAbstruct接口]

type TableAbstruct interface {
    Serialize() []string
}

Xxx()函数返回[]TableAbstruct,但实际类型为[]Tag。并且下面的程序可以很好地工作,因为Tag包含TableAbstruct界面。

func Xxx() []TableAbstruct {
    result := []TableAbstruct{}
    for i := 0; i < 10; i++ {
        table_obj := Tag{}
        result = append(result, table_obj)
    }
    return result
}

但是我想像下面这样写,但我不能。我认为问题是TypeError。但是我不明白为什么会发生错误。

func Xxx() []TableAbstruct {
    result := []Tag{}
    return result
}

1 个答案:

答案 0 :(得分:1)

Go对切片和类型没有任何幻想。简而言之,如果您说要返回[]TableAbstruct,则必须完全返回。因此,如果要返回[]Tag,则必须创建一片[]TableAbstruct,然后手动填充它:

func Xxx() []TableAbstruct {
  var returnValue []TableAbstruct
  for _, t := range result {
    returnValue = append(returnValue, t)
  }
  return returnValue
}