我有一个使用 Firestore 并托管在 Cloud Run 上的应用程序。
我有一个保存客户端实例的全局变量,我的问题是是否需要显式关闭它,因为
Close
方法本身声明“不需要在程序退出时调用关闭。”?
保存 Firebase 实例的“config”包:
var App *firebase.App
var Firestore
func LoadFirebase(ctx context.Context) {
app, err := firebase.NewApp(ctx, nil)
if err != nil {
log.Fatalln("Firebase initialisation failed:", err)
}
firestore, err := app.Firestore(ctx)
if err != nil {
log.Fatalln("Firestore initialisation failed:", err)
}
App = app
Firestore = firestore
}
“主”包:
func init() {
initialisers.LoadFirebase(context.Background())
}
func main() {
// initialise server
PORT := os.Getenv("PORT")
router := http.NewServeMux()
Routes(router)
server := http.Server{
Addr: ":" + PORT,
Handler: middleware.CheckAuth(router),
}
// IS THIS NECESSARY?
defer config.Firestore.Close()
fmt.Println("Server is running on port:", PORT)
log.Fatalln("Error starting server:", server.ListenAndServe())
}
close 方法通过关闭客户端维护的用于与服务器传输数据的套接字并阻止其自动重新连接来有效地终止客户端。 (据我所知,这种行为在所有 Firestore 客户端库之间都是一致的,并不是唯一的。)如果这不是您需要的行为,则无需调用它。是否需要这样做完全取决于您的代码的要求。