【发布时间】:2014-12-15 13:42:04
【问题描述】:
我有如下函数用于查询 mongo 数据库:
func findEntry(db, table string, entry *User, finder *bson.M) (err error) {
c := mongoSession.DB(db).C(table)
return c.Find(finder).One(entry)
}
我想通过传入一个指向任何实例化结构对象的指针来为“用户”以外的结构重用该函数——只是不太确定执行此操作的正确语义。我认为我应该能够通过将“入口”参数设置为 interface{} 来做到这一点,然后我需要使用反射将其“转换”回原始结构,以便 One() 函数调用可以正确填充在调用结构中?有没有“更好”的方法来实现这一点(请不要因为缺乏泛型而生气,我只是在寻找使用最佳实践的实用解决方案)。
【问题讨论】:
-
你就是这样做的,别无他法 :) 也不要对成语大发雷霆。
-
如果你的函数真的只有一行长(跨越两行):为什么不拥有几个这样的函数,比如 findUser findOther、findSomethingElse...?