在go中的包内共享变量
我正在编写一个Go应用程序,它需要连接到MongoDB以实现持久性 我希望共享客户端连接(这样我就不必为每个操作重新初始化/创建客户端连接)。(程序将公开一个restful API,因此每个操作或多或少都对应一个HTTP请求) 所以(因为这仍然是一个草案项目,仍然是一个单文件应用程序),我想这样做 a) 为客户端连接声明包范围的指针变量在go中的包内共享变量,go,Go,我正在编写一个Go应用程序,它需要连接到MongoDB以实现持久性 我希望共享客户端连接(这样我就不必为每个操作重新初始化/创建客户端连接)。(程序将公开一个restful API,因此每个操作或多或少都对应一个HTTP请求) 所以(因为这仍然是一个草案项目,仍然是一个单文件应用程序),我想这样做 a) 为客户端连接声明包范围的指针变量 var mongoClient*mongo.Client b) 在main中初始化它 clientOptions:=options.Client().Appl
var mongoClient*mongo.Client
b) 在main中初始化它
clientOptions:=options.Client().ApplyURI(“mongodb://localhost:27017")
mongoClient,错误:=mongo.Connect(ctx,clientOptions)
然后
c) 在处理函数中使用它,例如
collection:=mongoClient.Database(“mydb”).collection(“mycollection”)
问题是程序未编译时出现以下错误:
mongoClient已声明且未使用
我的解决办法是
A。在变量初始化之后,在main()
中添加以下行
mongoClient,err:=mongo.Connect(ctx,clientOptions)
_=mongoClient
或
B。对错误使用throwaway变量,这样我只有var初始化(而不是如下所示的声明
mongoClient,\=mongo.Connect(ctx,clientOptions)
但这阻止了我处理错误
对于这个问题是否有其他(更好的)实践/既定模式?
这是正确的做法吗?在这一行:
mongoClient, err := mongo.Connect(ctx, clientOptions)
请记住,:=
声明并初始化一个新变量。因此,您在此处创建了一个名为mongoClient
的新局部变量,该变量会遮挡全局变量;全局变量保持不变。请改为:
var err error
mongoClient, err = mongo.Connect(ctx, clientOptions)