Как использовать контекст при получении направления с помощью 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...)