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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵