我正在尝试从 Firestore 数据库中获取所有文档,并且一切正常。
但后来我决定将上下文和客户端变量设为全局变量,这样我就不必每次都将它们作为参数传递。
之后事情就破裂了。
我得到的错误是: panic: runtime error: invalid memory address or nil pointer dereference
根据堆栈跟踪,当我尝试: client.Collection("dummy").Documents(ctx)
我能做些什么来解决这个问题?
在我的情况下,如何有效地使用全局变量?
我的参考代码:
package main
import (
"context"
"fmt"
"log"
"cloud.google.com/go/firestore"
firebase "firebase.google.com/go"
"google.golang.org/api/iterator"
"google.golang.org/api/option"
)
var (
ctx context.Context
client *firestore.Client
)
func init() {
ctx := context.Background()
keyFile := option.WithCredentialsFile("serviceAccountKey.json")
app, err := firebase.NewApp(ctx, nil, keyFile)
if err != nil {
log.Fatalln(err)
}
client, err = app.Firestore(ctx)
if err != nil {
log.Fatalln(err)
}
fmt.Println("Connection to Firebase Established!")
}
func getDocuments(collectionName string) {
iter := client.Collection("dummy").Documents(ctx)
for {
doc, err := iter.Next()
if err == iterator.Done {
break
}
if err != nil {
log.Fatalf("Failed to iterate: %v", err)
}
fmt.Println(doc.Data()["question"])
}
}
func main() {
getDocuments("dummy")
defer client.Close()
}