【发布时间】:2012-10-11 06:34:31
【问题描述】:
我有一个接口Model,由struct Person实现。
为了获取模型实例,我有以下辅助函数:
func newModel(c string) Model {
switch c {
case "person":
return newPerson()
}
return nil
}
func newPerson() *Person {
return &Person{}
}
上述方法允许我返回一个正确类型的 Person 实例(以后可以使用相同的方法轻松添加新模型)。
当我尝试执行类似的操作来返回一个模型切片时,我收到了一个错误。代码:
func newModels(c string) []Model {
switch c {
case "person":
return newPersons()
}
return nil
}
func newPersons() *[]Person {
var models []Person
return &models
}
Go 抱怨:cannot use newPersons() (type []Person) as type []Model in return argument
我的目标是返回请求的任何模型类型的切片(无论是[]Person、[]FutureModel、[]Terminator2000,w/e)。我缺少什么,如何正确实施这样的解决方案?
【问题讨论】:
-
切片不同于 Go 中的数组。既然你真的在谈论切片,我编辑了你的帖子以反映这一点。
-
斯蒂芬,谢谢,感激 :-)
-
@JonL。你有没有想过这个?我正在尝试做同样的事情,这样我就不必为我的
/api/{collection}重复大量代码。除了需要读入切片的索引函数之外,我让它适用于所有内容。 -
@DerekPerkins,我不记得我最终在这里做了什么,而且我已经有一段时间没有玩围棋了。抱歉,我无法提供更多帮助。
-
逆变(或者是协方差?)又来了!
标签: go