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

如何将 MongoDB 数据库传递给 GO 例程?

如何将 MongoDB 数据库传递给 GO 例程?

Go
ITMISS 2021-06-03 18:43:21
我是 Go 的新手,我正在尝试编写一个简单的程序,该程序遍历 MongoDB 数据库中的所有用户,并使用 'mgo' 包为每个用户遍历他的所有帖子。package mainimport (    "fmt"    "labix.org/v2/mgo"    "labix.org/v2/mgo/bson")type User struct {    Id string    Email string}type Post struct {    Id string    Description string}func handleUser(db *mgo.Database, user *User) {    fmt.Println("ID: ", user.Id, " EMAIL: ", user.Email)    result := Post{}    iter := db.C("posts").Find(bson.M{"user_id": user.Id}).Iter()    for iter.Next(&result) {        fmt.Println("POST ID: ", result.Id, " POST DESCRIPTION: ", result.Description)    }}func main() {    session, err := mgo.Dial("localhost")    if err != nil {        panic(err)    }    defer session.Close()    db := session.DB("mydb")    result := User{}    iter := db.C("users").Find(nil).Iter()    for iter.Next(&result) {        handleUser(db, &result)    }   }这工作得很好,但如果我尝试将呼叫改变handleUser(db, &result)到go handleUser(db, &result)里面handleUser第二个查询没有做任何事情。我怀疑会话已经关闭,因为“主要”已经完成,我说得对吗?如果是这样,处理这种情况的方法是什么?
查看完整描述

1 回答

?
一只甜甜圈

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

你对specs是对的,它们定义了当 main 返回时,所有的 goroutine 都会被杀死:

当函数 main 返回时,程序退出。它不会等待其他(非主)goroutine 完成。

有两种选择。

  • 在 main 的末尾与你的 goroutine 同步。可以使用“完成”的 chanel 或sync.WaitGroup.

  • 在适当的情况下,可以使用阻塞的空 select 语句:

    select{} // Non busy block forever


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

添加回答

举报

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