Go 为什么我会得到‘;死机:运行时错误:无效内存地址或零指针取消引用’;在新计算机上访问Firestore?

Go 为什么我会得到‘;死机:运行时错误:无效内存地址或零指针取消引用’;在新计算机上访问Firestore?,go,google-cloud-firestore,go-testing,Go,Google Cloud Firestore,Go Testing,如果我试图通过:go run main.go直接运行测试或应用程序,我会感到恐慌 这段代码在我的旧MacBookPro上非常有效。它对我的新MacBookPro感到恐慌 我相信这个错误与访问Firestore数据存储有关,但我不确定出了什么问题 我正在运行相同的代码,所以数据存储密钥和其他所有内容都应该是相同的 以下是Github回购协议: 工作计算机: go版本go1.11.2达尔文/amd64 ❯ go test --- FAIL: TestCities (0.01s) panic: ru

如果我试图通过:go run main.go直接运行测试或应用程序,我会感到恐慌 这段代码在我的旧MacBookPro上非常有效。它对我的新MacBookPro感到恐慌

我相信这个错误与访问Firestore数据存储有关,但我不确定出了什么问题

我正在运行相同的代码,所以数据存储密钥和其他所有内容都应该是相同的

以下是Github回购协议:

工作计算机: go版本go1.11.2达尔文/amd64

❯ go test
--- FAIL: TestCities (0.01s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x14d557a]

goroutine 6 [running]:
testing.tRunner.func1(0xc000312200)
    /usr/local/go/src/testing/testing.go:874 +0x3a3
panic(0x15ac100, 0x1b3e740)
    /usr/local/go/src/runtime/panic.go:679 +0x1b2
cloud.google.com/go/firestore.(*Client).path(...)
    /Users/XXX/go/src/cloud.google.com/go/firestore/client.go:107
cloud.google.com/go/firestore.(*Client).Collection(0x0, 0x1677ac0, 0x6, 0x14)
    /Users/XXX/go/src/cloud.google.com/go/firestore/client.go:122 +0x9a
_/Users/XXX/Dropbox/go/src/firestoreTestHttp.addCitiesFirestore(0x5e4c4feb, 0xc000064760)
    /Users/XXX/Dropbox/go/src/firestoreTestHttp/city_handlers_test.go:218 +0x13d
_/Users/XXX/Dropbox/go/src/firestoreTestHttp.TestCities(0xc000312200)
    /Users/XXX/Dropbox/go/src/firestoreTestHttp/city_handlers_test.go:19 +0x26
testing.tRunner(0xc000312200, 0x16a1c98)
    /usr/local/go/src/testing/testing.go:909 +0xc9
created by testing.(*T).Run
    /usr/local/go/src/testing/testing.go:960 +0x350
exit status 2
FAIL    _/Users/XXX/Dropbox/go/src/firestoreTestHttp    0.165s
紧急计算机: go版本go1.13.5达尔文/amd64

❯ go test
--- FAIL: TestCities (0.01s)
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
    panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x8 pc=0x14d557a]

goroutine 6 [running]:
testing.tRunner.func1(0xc000312200)
    /usr/local/go/src/testing/testing.go:874 +0x3a3
panic(0x15ac100, 0x1b3e740)
    /usr/local/go/src/runtime/panic.go:679 +0x1b2
cloud.google.com/go/firestore.(*Client).path(...)
    /Users/XXX/go/src/cloud.google.com/go/firestore/client.go:107
cloud.google.com/go/firestore.(*Client).Collection(0x0, 0x1677ac0, 0x6, 0x14)
    /Users/XXX/go/src/cloud.google.com/go/firestore/client.go:122 +0x9a
_/Users/XXX/Dropbox/go/src/firestoreTestHttp.addCitiesFirestore(0x5e4c4feb, 0xc000064760)
    /Users/XXX/Dropbox/go/src/firestoreTestHttp/city_handlers_test.go:218 +0x13d
_/Users/XXX/Dropbox/go/src/firestoreTestHttp.TestCities(0xc000312200)
    /Users/XXX/Dropbox/go/src/firestoreTestHttp/city_handlers_test.go:19 +0x26
testing.tRunner(0xc000312200, 0x16a1c98)
    /usr/local/go/src/testing/testing.go:909 +0xc9
created by testing.(*T).Run
    /usr/local/go/src/testing/testing.go:960 +0x350
exit status 2
FAIL    _/Users/XXX/Dropbox/go/src/firestoreTestHttp    0.165s
如果我试图通过以下途径运行,会出现恐慌:

❯ 快跑,快跑


2020/02/18 17:19:39 http: panic serving [::1]:60479: runtime error: invalid memory address or nil pointer dereference
goroutine 9 [running]:
net/http.(*conn).serve.func1(0xc00027c6e0)
    /usr/local/go/src/net/http/server.go:1767 +0x139
panic(0x15a69c0, 0x1b39a50)
    /usr/local/go/src/runtime/panic.go:679 +0x1b2
cloud.google.com/go/firestore.(*Client).path(...)
    /Users/XXX/go/src/cloud.google.com/go/firestore/client.go:107
cloud.google.com/go/firestore.(*Client).Collection(0x0, 0x16728ba, 0x6, 0x14)
    /Users/XXX/go/src/cloud.google.com/go/firestore/client.go:122 +0x9a
main.indexHandler(0x1744360, 0xc000322000, 0xc0002c8200)
    /Users/XXX/Dropbox/go/src/firestoreTestHttp/main.go:50 +0xa2
net/http.HandlerFunc.ServeHTTP(0x169da80, 0x1744360, 0xc000322000, 0xc0002c8200)
    /usr/local/go/src/net/http/server.go:2007 +0x44
net/http.(*ServeMux).ServeHTTP(0xc0002ea100, 0x1744360, 0xc000322000, 0xc0002c8200)
    /usr/local/go/src/net/http/server.go:2387 +0x1bd
net/http.serverHandler.ServeHTTP(0xc000312000, 0x1744360, 0xc000322000, 0xc0002c8200)
    /usr/local/go/src/net/http/server.go:2802 +0xa4
net/http.(*conn).serve(0xc00027c6e0, 0x17457a0, 0xc00008cf80)
    /usr/local/go/src/net/http/server.go:1890 +0x875
created by net/http.(*Server).Serve
    /usr/local/go/src/net/http/server.go:2928 +0x384

虽然我在围棋中感觉不舒服,但我会试试。如果我错了,就告诉我

从错误来看,客户端似乎为零。在所附的Git repo中,您正在记录它应该设置为环境变量GCLOUD_PROJECT,但是我没有找到任何获取此值的
so.Getenv
函数。也许这个值是错误的

所以我猜这个语句
client,:=firestore.NewClient(ctx,projectd)
是用错误的projectd调用的。语句中省略了错误处理,因此我们不知道是否正确创建了客户机。如果它没有被创建,我们应该得到这样的错误

也许您应该添加错误处理,如中的示例所示,以确保在客户端创建过程中没有错误


我希望这对你有帮助

(总是在问题本身中包含答案)你在不应该通过零的地方通过了零。不要忽略代码中的错误。我添加了错误,这表明问题在于我没有在新的Macbook Pro.client上安装GOOGLE_应用程序_凭据,错误:=firestore.NewClient(ctx,projectID)。错误消息表明我没有安装GOOGLE服务帐户密钥。我按照这里的说明:在我的新Macbook上安装凭证JSON文件,它工作得非常好。