登录
首页 >  Golang >  Go问答

无法在 golang 中将接口切片插入到结构切片

来源:stackoverflow

时间:2024-03-11 21:18:26 121浏览 收藏

从现在开始,我们要努力学习啦!今天我给大家带来《无法在 golang 中将接口切片插入到结构切片》,感兴趣的朋友请继续看下去吧!下文中的内容我们主要会涉及到等等知识点,如果在阅读本文过程中有遇到不清楚的地方,欢迎留言呀!我们一起讨论,一起学习!

问题内容

我有 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
}

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

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

解决方案


go 对切片和类型没有任何幻想。简而言之,如果您说要返回 []tableabstruct,则必须准确返回。因此,如果您想返回 []tag,则必须创建 []tableabstruct 的切片,然后手动填充它:

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

本篇关于《无法在 golang 中将接口切片插入到结构切片》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>