mongodb - 在go中使用和分配其他文件(包)的变量

标签 mongodb variables go global-variables

我有一个使用 mongodb 作为后端数据库的 http 服务器,我将数据库操作包装在一个单独的文件中 (package),我不想每次都建立连接,所以我考虑制作一个global session 并像this 一样复制它也许是个好主意。所以这是到目前为止我得到的:

文件 server.go 我在其中启动了 http 服务器,我也想从这里初始化 mongodb 连接,因为我不知道其他建立连接的方法到目前为止 http 服务器的整个生命周期:-(

package main

import(
    "./mylib"
    "net/http"
)
...
func main(){
    dbutil.MySession, err := dbutil.ConnectDb()
    if err != nil {
       panic(err)
    }
    // I will just omit the http server config code for convenience
    http.HandleFunc(...)
    http.HandleFunc(...)
}
...

这里是包含变量 MySession 的文件 dbutil.go。顺便说一句,它们的总目录结构是这样的,应该没问题:

.
├── mylib
│   └── dbutil.go
└── server.go

dbutil.go 中:

package dbutil
import (
  ...
)

var MySession *mgo.Session
func ConnectDb() (*mgo.Session, error){
   session, err := mgo.Dial("127.0.0.1")
   if err != nil {
       return nil, err
   }
   return session, nil
}

但是当我编译它们并运行服务器时,它会提示:

# command-line-arguments
./server.go:28: cannot declare name dbutil.MySession

我注意到如果我将 dbutil.MySession, err := dbutil.ConnectDb() 更改为 dbutil.MySession, err = dbutil.ConnectDb() 事情不会要么工作。

那么在这种情况下如何分配global 变量MySession?还是我一开始就做错了什么(尝试使用其他文件的变量)?

最佳答案

Short variable declaration := 创建新变量。新变量的名称不能包含包名称,但你的包含:

dbutil.MySession, err := dbutil.ConnectDb()

只是不要使用简短的变量声明:

var err error
dbutil.MySession, err = dbutil.ConnectDb()
// ...rest of your code

关于mongodb - 在go中使用和分配其他文件(包)的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28766489/

相关文章:

html - 如何使用 jquery 从 Rotten Tomatoes 检索搜索列表?

mongodb - Mongodb复制

python - Python中使用tempfile和subprocess将mysql转入mongodb

go - 使用 Gin 访问中间件中的路由

go - 如何将数据从一个结构片移动到另一个结构片?

java - 将 double 变量从一种方法传递到另一种方法

mongodb - 向大型集合中的每个文档添加新属性

mongodb - 仅复制 {'public' :true} in MongoDB 处的文档

bash 变量分别捕获 stderr 和 stdout 或获取退出值

php - 从 PayPal 返回自定义输入数据