我正在尝试从 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()

}