# #go #google-app-engine #go-gin
#Вперед #google-app-engine #go-gin
Вопрос:
Я работаю над приложением golang с использованием gin framework. По сути, он просто извлекает данные из firestore в виде JSON.
Локально это работает отлично, но когда я развертываю его в GAE (развертывание приложения gcloud), во время развертывания ошибки нет, но при доступе к странице он не работает, и в журналах отображается ошибка: «паника: ошибка времени выполнения: неверный адрес памяти или разыменование нулевого указателя».
список пакетов
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,
})
}
Комментарии:
1.Вы должны по крайней мере указать, в какой строке ваш код завершается ошибкой.
2. Вы не обрабатываете ошибку, возвращенную iter.Next. Вы только печатаете его, а затем продолжаете, как будто ничего не произошло.
Ответ №1:
Поскольку никто не имеет ни малейшего представления, где это произошло?
Анализируя ваш код, единственная возможность, о которой я могу подумать, заключается в том, что ваша itr
переменная пуста.
Возможно, вам потребуется изменить часть проверки на ошибку и добавить панику вместо того, чтобы просто печатать ошибку и продолжать выполнение
if err != nil {
panic("ERROR")
}
Комментарии:
1. Проблема именно в if err != nil { panic(«ОШИБКА») }, но она работает локально, а не при развертывании в GAE
2. Теперь у меня ошибка в GAE: panic: ошибка rpc: code = permissiondened desc = Отсутствуют или недостаточны разрешения