2015-08-28 7 views
14

В моем проекте Google App Engine, написанном на Go, который я использовал, например.Как правильно импортировать Golang appengine?

import "appengine/datastore" 

с успехом в течение длительного времени и при условии, что импорт находит вещи, где у меня есть SDK App Engine. Однако, теперь я хочу использовать библиотеку третьей стороны также от Google, которая использует вещи из App Engine, а также, но импорт с полным путем:

import "google.golang.org/appengine" 

Запуск приложения

$ goapp serve 

терпит неудачу не с нахождение appengine:

...go/src/golang.org/x/oauth2/client_appengine.go:16: can't find import: "google.golang.org/appengine/urlfetch" 

Can't find package "google.golang.org/appengine" in $GOPATH 

Очевидно, что я хочу использовать те же части App Engine, чтобы не было других проблем. Мое первое, что я хочу сказать библиотеке сторонних разработчиков, использовать библиотеки SDK App Engine, но я не знаю, как он имеет другой префикс в импорте.

Должен ли я использовать полный путь в моем проекте для импорта всего приложения? Это было бы противоположно тому, что я читал в Google App Engine для веб-страниц Golang. Например. here.

Как правило, что такое настройка, чтобы находить нужные библиотеки приложений как в разработке, так и в App Engine, а также в сторонних библиотеках?

Заранее благодарим за любую помощь!

UPDATE

Я также могу видеть, что после добавления библиотеки третьей стороны и работает go get он принес все виды материала в $GOPATH/src/google.golang.org/api/.... Много вещей там и appengine, и т.д. Это, кажется, все Golang Google API ...!

Так что это не разрешено, но я узнал, что есть изменение, которое изменяется на fully qualified appengine import paths.

Теперь у меня есть приложение, выполняемое локально, когда я втягиваю новый appengine, чтобы удовлетворить библиотеку oauth, которая использует новые пути импорта.

go get google.golang.org/appengine 

По this:

Если вы не хотите, чтобы полностью обновить приложение, чтобы использовать новые пакеты для App Engine, вы можете использовать оба набора пакетов параллельно, используя только новые пакеты с пакетом oauth2.

На самом деле очень запутанно, и я не знаю, что доступно при развертывании в App Engine. Кто-нибудь знает?

+0

Почему downvote? – murrekatt

+2

Я смущен. Это разрешено? Это было только потому, что вы никогда не выбирали свои зависимости? – JimB

+1

Вы пробовали просто «импортировать» appengine «'? Я предполагаю, что Go должен реализоваться из '$ GOPATH', не указывая явно полный путь. – PieOhPah

ответ

8

Это как в вашем обновлении; Вы можете использовать оба типа импорта параллельно (в том же фрагменте кода), пока они протестующий старый API и заканчивали на новый:

Большинство App Engine услуги доступны с точно такой же API. Несколько API были очищены, а некоторые из них еще недоступны.

(source, чуть дальше от одного из ваших ссылок)

Если вам нужно использовать как appengine и google.golang.org/appengine, то вы можете псевдоним ввозные пути, чтобы сделать это возможным. Что-то вроде:

import (
    oldAppengine "appengine" 
    "google.golang.org/appengine" 
) 

Или что бы вы хотели назвать.

Если что-то недоступно при развертывании, вы получите ошибки при сборке и не будете развертываться в App Engine, поэтому вам не придется беспокоиться об этом.

+0

Да, похоже, это так ... просто заставляет меня задаться вопросом, есть ли какие-то вещи, которые могут испортиться, когда вы используете оба параллельно. Например. мышление одного и того же объекта, но другого размера ... – murrekatt

+0

Несомненно, могут быть некоторые неуловимые детали реализации, которые не соответствуют друг другу, если вы переходите от одного пакета к другому. Идея, я думаю, состоит в том, чтобы использовать один или тот же пакет из старого или нового (например, например, «appengine» или «google.golang.org/appengine») и переводить пакеты, один за раз. Вы не хотите использовать старый, так как он устарел, если вы не используете что-то, что не работает в более новых пакетах. Но если у вас есть *, пакеты могут сосуществовать ненадолго, я бы сделал ставку. –

1

Если вы используете gosdk, просто запустите goapp get в том же каталоге, что и ваш .go-файл, и он загрузит и установит зависимости к вашей установке gosdk. Затем вы снова развертываете приложение, и оно должно компилироваться без проблем.

Когда он работает нет подсказки и файлы будут загружены в gosdk \ gopath \ ЦСИ

После fininshing будет предупреждающее сообщение, которое может быть проигнорировано:

идут установить: не устанавливать местоположение для каталога C: \ your_current_directory вне gOPATH для получения более подробной информации смотрите: перейти помощь gopath

Смежные вопросы