go - panic : runtime error: invalid memory address or nil pointer dereference only on the GAE

标签 go google-app-engine go-gin

我正在使用 gin 框架开发 golang 应用程序。基本上它只是以 JSON 格式从 firestore 获取数据。

在本地它工作得很好,但是当我将它部署到 GAE (gcloud app deploy) 时,部署期间没有错误,但是当访问页面时它不起作用,并且在日志中提供了一个错误:“panic: runtime error: invalid内存地址或 nil 指针取消引用”

包列表集合

import (
    "fmt"
    "log"
    "net/http"

    "cloud.google.com/go/firestore"
    "github.com/gin-gonic/gin"
    "google.golang.org/api/iterator"
    "google.golang.org/appengine"
)

func main() {

}

//GetListCollections function

func GetListCollections(c *gin.Context) {

    var coll []string
    ctx := appengine.NewContext(c.Request)

    projectID := "XXX"
    client, err := firestore.NewClient(ctx, projectID)
    if err != nil {
        log.Fatalf("Failed to create client: %v", err)
    }
    defer client.Close()

    iter := client.Collection("collection").Documents(ctx)

    for {

        doc, err := iter.Next()

        if err == iterator.Done {
            break
        }
        if err != nil {
            fmt.Println("ERROR")
        }

        coll = append(coll, doc.Data()["Title"].(string))

    }

    c.JSON(http.StatusOK, gin.H{
        "collections": coll,
    })

}

最佳答案

因为没有人知道它发生在哪里?

从分析你的代码,我能想到的唯一可能性是你的 itr 变量为空。

您可能需要更改错误检查部分并添加 Panic 而不是仅打印错误并继续运行

        if err != nil {
            panic("ERROR")
        }

关于go - panic : runtime error: invalid memory address or nil pointer dereference only on the GAE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55808776/

相关文章:

go - 如何在发布请求中删除静态中间件?

go - 通过缓冲 channel 旋转进行简单锁定

java - 在 GAE/J JDO 中持久存储内部类的正确方法是什么?

java - 使用 App Engine 数据存储区以编程方式索引键或属性

go - 使用Gin从组内提供静态文件

http - 如何从 Go 中的查询参数中提取逗号分隔值?

go - go - 如何使用证书存储中的证书并在 gin 框架中运行 TLS?

linux - 用于 odbc 连接 panic 的 alexbrainman/odbc golang 包

go - 在 Go 中测试通过 json http 响应返回的错误

google-app-engine - 是否可以在谷歌应用引擎中启动计时器?