Как создать контекстный объект в Google Cloud Run для Firebase - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь создать объект контекста, чтобы я мог подключиться к firestore из облачного запуска, однако все примеры, которые я нахожу в сети, в основном говорят, что мне нужны объекты контекста, примеры, которые я нахожу в Интернете, обычно выглядят так:

        ctx := context.Background()
        client, err := firestore.NewClient(ctx, "projectID")
        if err != nil {
            fail(w, err.Error())
            // TODO: Handle error.
        }

Эти примеры можно найти в таких местах, как эта: https://godoc.org/cloud.google.com/go/firestore#example-NewClient Нигде в этом примере нет объяснения, где найти объект контекста.

, поэтомуЯ просто получаю эту ошибку:

undefined: context

Я думаю, что документация слишком запутанная.

Ответы [ 3 ]

2 голосов
/ 06 июля 2019

Вы должны использовать r.Context() объекта http.Request в обработчике запросов вместо инициализации нового отдельного контекста, такого как context.Background ().

Основная цель контекстов состоит в их распространении, и вCloud Run вы всегда обрабатываете запросы, поэтому, если вы пропустите контекст запроса, это будет правильно.

Я думаю, что в вашем случае пакет «context» не импортируется.Убедитесь, что вы используете go 1.11+ в вашем Dockerfile и говорите:

import “context”
2 голосов
/ 06 июля 2019

В Go вам нужно импортировать пакеты.Для этого утверждения ctx := context.Background() добавьте в начало своего исходного файла import "context" или объедините с существующим набором импорта.

Как и в большинстве языков, чем больше у вас опыта, тем больше смысла в языке, и вы просто знаетечто делать.Большинство языков одинаковы.В C / C ++ у вас есть оператор include, C # - оператор using, в Python - оператор import и т. Д.

У Google есть большой пакет примеров использования Go и Google Cloud Platform:

Примеры использования Google Cloud на Go

Я написал статью, в которой описывается мое 30-дневное путешествие для изучения Go и Google Cloud Platform.

Google Cloud and Go - мой путь к изучению нового языка за 30 дней

0 голосов
/ 06 июля 2019

Учитывая изобилие трех строк примеров кода, которые являются трудными для начинающих, и отсутствие полных рабочих примеров в Интернете, таких как я, вот полный рабочий пример, который мне как раз был нужен, когда я начал эту задачу, я надеюсь, это поможет кому-нибудь в будущем.


package main
import (
    "cloud.google.com/go/firestore" // https://godoc.org/cloud.google.com/go/firestore"
    "context"                       // https://blog.golang.org/context
    firebase "firebase.google.com/go"
    "fmt"
    "log"
    "net/http"
    "os"
)
func fail(w http.ResponseWriter, msg string) {
    fmt.Fprintln(w, "fail:"+msg)
    log.Println("fail:" + msg)
}

// State example code
type State struct {
    Capital    string  `firestore:"capital"`
    Population float64 `firestore:"pop"` // in millions
}

func main() {

    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        override := make(map[string]interface{})

        ctx := context.Background()
        client, err := firestore.NewClient(ctx, "YOURPID")// set GOOGLE_APPLICATION_CREDENTIALS env var
        if err != nil {
            fail(w, err.Error())
            return
        }

        states := client.Collection("States")
        ny := states.Doc("NewYork")
        wr, err := ny.Create(ctx, State{
            Capital:    "Albany",
            Population: 19.8,
        })
        fmt.Println(wr)

    })

    log.Fatal(http.ListenAndServe("0.0.0.0:8082", nil))
}

...