doucheng1891 2018-11-09 03:46
浏览 24
已采纳

切片结构无法插入golang中的接口切片[重复]

This question already has an answer here:

I have Tag struct and TableAbstruct interface like below example.

[Tag struct]

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

[TableAbstruct interface]

type TableAbstruct interface {
    Serialize() []string
}

Xxx() function returns []TableAbstruct, but actual type is []Tag. And below program will work well because Tag includes TableAbstruct interface.

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

But I want to write like below and I couldn't. I think the problem is TypeError. But I couldn't understand why the error has occurred.

func Xxx() []TableAbstruct {
    result := []Tag{}
    return result
}
</div>
  • 写回答

1条回答 默认 最新

  • duangai1941 2018-11-09 04:29
    关注

    Go does not have any fanciness around slices and types. Put simply, if you say you are going to return []TableAbstruct, you have to return that exactly. So if you want to return a []Tag, you have to create a slice of []TableAbstruct and then go populate it manually:

    func Xxx() []TableAbstruct {
      var returnValue []TableAbstruct
      for _, t := range result {
        returnValue = append(returnValue, t)
      }
      return returnValue
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)