Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在go中的包内共享变量_Go - Fatal编程技术网

在go中的包内共享变量

在go中的包内共享变量,go,Go,我正在编写一个Go应用程序,它需要连接到MongoDB以实现持久性 我希望共享客户端连接(这样我就不必为每个操作重新初始化/创建客户端连接)。(程序将公开一个restful API,因此每个操作或多或少都对应一个HTTP请求) 所以(因为这仍然是一个草案项目,仍然是一个单文件应用程序),我想这样做 a) 为客户端连接声明包范围的指针变量 var mongoClient*mongo.Client b) 在main中初始化它 clientOptions:=options.Client().Appl

我正在编写一个Go应用程序,它需要连接到MongoDB以实现持久性

我希望共享客户端连接(这样我就不必为每个操作重新初始化/创建客户端连接)。(程序将公开一个restful API,因此每个操作或多或少都对应一个HTTP请求)

所以(因为这仍然是一个草案项目,仍然是一个单文件应用程序),我想这样做

a) 为客户端连接声明包范围的指针变量

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)