Почему я получаю "паника: ошибка времени выполнения: недопустимый адрес памяти или разыменование нулевого указателя" при доступе к Firestore на новом компьютере?

У меня возникает паника, если я пытаюсь запустить тесты или запустить приложение напрямую через: go run main.go Код отлично работает на моем старом Macbook Pro. На моем новом Macbook Pro паника.

Я считаю, что ошибка имеет какое-то отношение к доступу к хранилищу данных Firestore, но я не уверен, что происходит не так.

Я использую тот же код, поэтому ключи хранилища данных и все остальное должны быть идентичны.

Вот репо на Github: https://github.com/golangnewb/FirestoreTestHttp

Рабочий компьютер: go версия go1.11.2 darwin / amd64

Panic Computer: go версия go1.13.5 darwin/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

Вот паника, если я попытаюсь запустить через:

❯ запустите main.go


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

1 ответ

Решение

Хотя я плохо себя чувствую в го, я попробую выстрелить. Если я ошибаюсь, просто дайте мне знать.

Из ошибки кажется, что Client is nil. В прикрепленном репозитории Git в основном вы регистрируете, что он должен быть установлен как переменная среды GCLOUD_PROJECT, однако я не нашел никакихso.Getenvфункция, которая получает это значение. Может это значение неверное...?

Так что я предполагаю это заявление client, _ := firestore.NewClient(ctx, projectID)вызывается с неправильным идентификатором проекта. В заявлении отсутствует обработка ошибок, поэтому мы не знаем, правильно ли был создан клиент. Если он не был создан, то мы должны получить такую ​​ошибку.

Возможно, вам стоит добавить обработку ошибок, как в примере в Go Firestore Reference, чтобы убедиться, что во время создания клиента нет ошибки.

Я надеюсь, что это поможет вам!

Другие вопросы по тегам