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 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。