Как правильно импортировать Golang appengine?
В моем проекте Google App Engine, написанном в разделе "Go", который я использовал, например,
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
Очевидно, что я хочу использовать те же части приложения Engine, чтобы не было других проблем. Мое первое, что я хочу сказать библиотеке сторонних разработчиков, использовать библиотеки SDK App Engine, но я не знаю, как он имеет другой префикс в импорте.
Должен ли я использовать полный путь в моем проекте для всех импорта App Engine? Это было бы противоположно тому, что я читал на веб-страницах Google App Engine для Golang. Например. здесь.
Как правило, каким образом можно настроить файлы так, чтобы они находили нужные библиотеки приложений как в разработке, так и в App Engine, а также в сторонних библиотеках?
Заранее благодарим за помощь!
UPDATE
Я также вижу, что после добавления библиотеки сторонних разработчиков и запуска go get
он извлекал всевозможные вещи в $GOPATH/src/google.golang.org/api/...
. Много вещей там и appengine, как и т.д. Кажется, все Golang API Google...!
Так что это не удалось решить, но я узнал, что есть изменения, которые меняют на полностью адаптированные пути импорта приложений.
Теперь у меня есть приложение, выполняемое локально, когда я загрузил новый appengine, чтобы удовлетворить библиотеку oauth, которая использует новые пути импорта.
go get google.golang.org/appengine
В соответствии с этим:
Если вы не хотите обновлять все приложение для использования новых пакетов App Engine, вы можете использовать оба набора пакетов параллельно, используя только новые пакеты с пакетом oauth2.
На самом деле очень запутанно, и я не знаю, что доступно, когда я развертываю App Engine. Кто-нибудь знает?
Ответы
Ответ 1
Это похоже на ваше обновление; вы можете использовать оба типа импорта параллельно (в том же фрагменте кода), в то время как они устарели старым API и заканчивают новый:
Большинство служб App Engine доступны с точно таким же API. Несколько API были очищены, а некоторые еще недоступны.
(источник, чуть дальше от одной из ваших ссылок)
Если вам нужно использовать как appengine
, так и google.golang.org/appengine
, вы можете указать пути импорта, чтобы сделать это возможным. Что-то вроде:
import (
oldAppengine "appengine"
"google.golang.org/appengine"
)
Или все, что вы хотите назвать.
Если что-то не доступно при развертывании, вы получите ошибки в сборке и не будете развертываться в App Engine, поэтому вам не придется беспокоиться об этом.
Ответ 2
Если вы используете gosdk, просто запустите goapp get
в том же каталоге, что и ваш .go файл, и он загрузит и установит зависимости к вашей установке gosdk. Затем вы снова развертываете приложение, и оно должно скомпилироваться без проблем.
Когда он работает там, приглашение и файлы не будут загружены в gosdk\gopath\src
После финиширования появится предупреждающее сообщение, которое можно игнорировать:
go install: нет места установки для каталога C:\ваш_current_directory вне GOPATH Для получения дополнительной информации см.: go help gopath