我正在使用Golang Revel进行一些Web项目,到目前为止已经完成了12个项目。在所有这些项目中,由于返回类型,我都有很多代码冗余。看一下这两个函数:
func (c Helper) Brands() []*models.Brand{
//do some select on rethinkdb and populate correct model
var brands []*models.Brand
rows.All(&brands)
return brands
}
func (c Helper) BlogPosts() []*models.Post{
//do some select on rethinkdb and populate correct model
var posts []*models.Post
rows.All(&posts)
return posts
}
正如您所看到的,它们都返回相同类型的数据(类型为struct)。 我的想法只是像这样传递字符串变量:
func (c Helper) ReturnModels(modelName string) []*interface{} {
//do rethinkdb select with modelName and return []*interface{} for modelName
}
像这样,我只需要一个帮助程序来返回数据类型,而不是为不同的模型但相同的数据类型一遍又一遍地做同样的事情。
我的问题是:
- 这个可能吗?
- 如果是,你能指导我查找正确的文档吗?
- 如果不行,我会很高兴返回你的答案 :)
ReturnModels("brands").([]Brand)
将会触发 panic。在这种情况下,你应该断言为[]*models.Brand
。使用逗号 ok 习惯用法可以防止 panic 事件的发生:https://golang.org/doc/effective_go.html#interface_conversions。 - elithrar