gpt4 book ai didi

go - 在 go 中的包内共享变量

转载 作者:行者123 更新时间:2023-12-01 22:38:29 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How to use global var across files in a package?

(3 个回答)


2年前关闭。




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

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

所以(因为这仍然是一个草稿项目并且仍然是一个单一的文件应用程序)我虽然这样做了。

a) 为客户端连接声明一个包作用域指针变量

var mongoClient *mongo.Client 

b) 在 main 中初始化它

clientOptions := options.Client().ApplyURI("mongodb://localhost:27017")
mongoClient, err := mongo.Connect(ctx, clientOptions)

进而

c)在处理函数中使用它,例如

collection := mongoClient.Database("mydb").Collection("mycollection")

问题是程序无法编译并出现错误:

mongoClient declared and not used



我的解决方法是

一个 .在 main() 中添加以下行变量初始化后

    mongoClient, err := mongo.Connect(ctx, clientOptions)
_ = mongoClient

或者

.对错误使用一次性变量,以便我只有 var 初始化(而不是如下声明

mongoClient, _ = mongo.Connect(ctx, clientOptions)

但这阻止了我进行错误处理。

对于这个问题,还有其他(更好的)实践/既定模式吗?
这是正确的做法吗?

最佳答案

在这一行:

mongoClient, err := mongo.Connect(ctx, clientOptions)

请记住 := 声明并初始化一个新变量 .因此,您正在创建一个名为 mongoClient 的新局部变量。这里,它遮蔽了全局;全局保持不变。改为:
var err error
mongoClient, err = mongo.Connect(ctx, clientOptions)

关于go - 在 go 中的包内共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59566727/

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