将不同的结构传递给函数(GO)?

时间:2014-12-15 13:42:05

标签: go mgo

我有一个类似以下的函数来查询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)
}

我希望通过传入指向任何实例化的struct对象的指针来重用除" User"之外的结构的函数 - 只是不太确定正确的语义来执行此操作。我认为我应该能够通过制作“条目”来做到这一点。参数接口{},然后我需要使用反射来投射'它回到原始结构,所以One()函数调用可以正确填写调用中的结构?有没有更好的'实现这一目标的方法(请不要担心缺乏泛型,我只是在寻找使用最佳实践的实用解决方案)。

1 个答案:

答案 0 :(得分:2)

使用此功能:

func findEntry(db, table string, entry interface{}, finder bson.M) error {
    c := mongoSession.DB(db).C(table)
    return c.Find(finder).One(entry)
}

并称之为:

var user User
err := findEntry("db", "users", &user, bson.M{"name": "John"})

user的类型信息通过findEntry传递给One方法。不需要反思或者#34;演员"在findEntry

另外,请使用bson.M代替*bson.M。这里没有必要使用指针。

我创建了an example on the playground以显示类型信息是通过findEntry传递的。