猿问

结构片无法插入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

}

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


func Xxx() []TableAbstruct {

    result := []Tag{}

    return result

}


ITMISS
浏览 117回答 1
1回答

慕尼黑8549860

Go 对切片和类型没有任何幻想。简而言之,如果您说要返回[]TableAbstruct,则必须准确返回。所以如果你想返回 a []Tag,你必须创建一个切片[]TableAbstruct然后手动填充它:func Xxx() []TableAbstruct {&nbsp; var returnValue []TableAbstruct&nbsp; for _, t := range result {&nbsp; &nbsp; returnValue = append(returnValue, t)&nbsp; }&nbsp; return returnValue}
随时随地看视频慕课网APP

相关分类

Go
我要回答