我有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
}
答案 0 :(得分:1)
Go对切片和类型没有任何幻想。简而言之,如果您说要返回[]TableAbstruct
,则必须完全返回。因此,如果要返回[]Tag
,则必须创建一片[]TableAbstruct
,然后手动填充它:
func Xxx() []TableAbstruct {
var returnValue []TableAbstruct
for _, t := range result {
returnValue = append(returnValue, t)
}
return returnValue
}