想请教一下问题,我想对beego的orm再封装一层,方便使用,可参数类型限制编译不过,不知道怎么改了。
```
举例说明,现有两个数据模型:
// 模型1:
type Post struct {
Id int
Title string
Content string
Status int
}
// 获取数据集
var posts []Post
orm.NewOrm().QueryTable("post").Filter("Status", 1).All(&posts)
// 模型2:
type News struct {
Id int
Title string
Content string
Status int
}
// 获取数据集合
var news []News
orm.NewOrm().QueryTable("post").Filter("Status", 1).All(&news)
```
想着对orm进行再次封装,以便方便调用, 比如抽象出一个方法:
```
func GetDataList(tableName string, dataList interface{}) (datalist interface{}) {
orm.NewOrm().QueryTable(tableName).Filter("Status", 1).All(&datalist)
return datalist
}
```
意想中的调用方式是这样:
```
var posts []Post
fmt.Println(GetDataList("post", post))
var news []News
fmt.Println(GetDataList("news", news))
```
可事实发现编译不过~报错信息:
```
wrong object type `*interface {}` for rows scan, need *backend-api/models.post
```
想问一下在go中这样一般怎么写?
封装用到interface就行了, 不要过度封装. 不要把面对对象的封装思想带到go里面, 你会越用越难受的.
我也说过了, 你只需要传interface{}, 不要传&interface{}就行了啊, 说那么多感觉更搞不清楚你的意图了.
#5
更多评论
楼主对 interface知之甚少, 如果已经作为interface使用了 是不能再&传它的指针的.
你啥时候见过传interface{}类型的指针的这种用法啊?
#1