为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
当年话下 2021-09-10 10:07:55
我有一个类似于以下查询 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)}我想通过传递指向任何实例化结构对象的指针来为“用户”以外的结构重用该函数 - 只是不太确定这样做的正确语义。我认为我应该能够通过将“entry”参数设为 interface{} 来做到这一点,然后我需要使用反射将它“强制转换”回原始结构,以便 One() 函数调用可以正确填充在调用的结构中?有没有“更好”的方法来实现这一点(请不要因为缺乏泛型而发火,我只是在寻找使用最佳实践的实用解决方案)。
查看完整描述

1 回答

?
森栏

TA贡献1810条经验 获得超5个赞

使用这个功能:


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方法。没有必要在findEntry.


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


我在操场上创建了一个示例,以显示类型信息是通过 findEntry 传递的。


查看完整回答
反对 回复 2021-09-10
  • 1 回答
  • 0 关注
  • 151 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信