Объединить автономное веб-приложение и GAE в Go - PullRequest
4 голосов
/ 25 сентября 2011

Я работаю над очень простым веб-приложением, написанным на языке Go.У меня есть автономная версия и теперь портировать его на GAE.Кажется, что есть очень небольшие изменения, в основном касающиеся API хранилища данных (в автономной версии мне нужны только файлы).Мне также нужно включить пакеты appengine и использовать init () вместо main ().

Есть ли простой способ объединить обе версии?Поскольку в Go нет препроцессора, кажется, что я должен написать GAE-совместимый API для автономной версии и использовать этот фиктивный модуль для автономной сборки и использовать настоящий API для версии GAE.Но для меня это звучит как излишнее.

Другая проблема заключается в том, что GAE может использовать более старую версию Go (например, в недавнем выпуске Go используется новый шаблонный пакет, но GAE использует более старый и несовместимый).Итак, есть ли какие-либо изменения для обработки таких различий во время сборки или во время выполнения?

Спасибо, Серж

UPD: Теперь GAE использует ту же версию Go (r60), как стабильный автономный компилятор, теперь уровень абстракции действительно прост.

Ответы [ 2 ]

3 голосов
/ 26 сентября 2011

В широком смысле используйте абстракцию.Предоставьте интерфейсы для сохранения и напишите для этого две реализации, одну на основе хранилища данных, а другую на основе локальных файлов.Затем напишите отдельный модуль main / init для каждой платформы, который создает соответствующий интерфейс персистентности и передает его в основное приложение для использования.

1 голос
/ 26 сентября 2011

Мой немедленный ответ (если вы хотите поддерживать версии GAE и не-GAE), что вы используете надежную VCS, которая хороша для слияния (вероятно, git или hg), и поддерживает отдельные ветви для каждой версии. API GAE достаточно хорошо вписывается в Go, поэтому изменений не должно быть слишком много.

Что касается вопроса о различных версиях, вам, вероятно, следует сохранить код в версии GAE и использовать gofix (который, к сожалению, односторонний) для создания версии, совместимой с выпуском. Единственное место, где это может вызвать проблемы, - это использование пакета template, который находится в процессе устаревания; при необходимости вы можете включить новый пакет template в свой комплект GAE.

Если в итоге вы получите код GAE, который не хотите запускать на серверах Google, вы также можете просмотреть AppScale .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...