Как использовать контекст при получении направления с помощью GO? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть следующий код для получения направления из Google Cloud:

import (
    "google.golang.org/appengine"
    "google.golang.org/appengine/urlfetch"
    "fmt"
    "io/ioutil"
    "net/http"
)

const directionAPIKey = "APIKey"
const directionURL = "https://maps.googleapis.com/maps/api/directions/json?origin=%s&destination=%s&mode=%s&key=%s"

func main() {
    http.HandleFunc("/", handler)
}

func handler(w http.ResponseWriter, r *http.Request) {
    ctx := appengine.NewContext(r)
    direction, err := fetchDirection(ctx, r.FormValue("origin"), r.FormValue("destination"), r.FormValue("mode"))
    if err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    w.Header().Add("Content-Type", "application/json; charset=utf-8")
    w.Write(direction)
}

func fetchDirection(ctx appengine.Context, origin string, destination string, mode string) ([]byte, error) {
    client := urlfetch.Client(ctx)
    resp, err := client.Get(fmt.Sprintf(directionURL, origin, destination, mode, directionAPIKey))
    if err != nil {
        return nil, err
    }
    defer resp.Body.Close()
    return ioutil.ReadAll(resp.Body)
}

Но я получаю сообщение об ошибке:

undefined: appengine.Context

При попытке развернуть приложение. Я пытался изменить:

ctx := appengine.NewContext(r)

на

ctx := r.Context()

и

func fetchDirection(ctx appengine.Context, origin string...)

на

func fetchDirection(ctx Context, origin string...)

Но я получаю :

undefined: Context

Я совсем заблудился. Я новичок в Go и GCP, так что проявите ко мне терпение. Спасибо

1 Ответ

1 голос
/ 19 июня 2020

Если вы проверите godo c для urlfetch , вы увидите, что он ссылается на , где определен тип контекста . Это, в свою очередь, говорит вам, что «Начиная с Go 1.7 этот пакет доступен в стандартной библиотеке в контексте имени. https://golang.org/pkg/context

Итак, добавьте импорт:

import "context"

и называть его:

func fetchDirection(ctx context.Context, origin string...)
...