gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:39:44 24 4
gpt4 key购买 nike

我有一个类似下面的函数来查询一个 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() 函数调用可以正确填充在调用的结构中?有没有“更好”的方法来实现这一目标(请不要因为缺乏泛型而火上浇油,我只是在寻找使用最佳实践的实用解决方案)。

最佳答案

使用这个函数:

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。这里不需要使用指针。

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

关于go - 将不同的结构传递给函数(GO)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com