Как использовать контекст при получении направления с помощью GO?

У меня есть следующий код, чтобы получить направление от 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 ответ

Решение

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

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

import "context"

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

func fetchDirection(ctx context.Context, origin string...)
Другие вопросы по тегам