2016-04-14 5 views
3

Мое приложение прекрасно работает с использованием программного обеспечения для разработки Appengine. Когда я пытаюсь развернуть, я получаю эту ошибку:Структура папки Appengine для проекта GO

main.go: 11: не может найти импорт: «github.com/afoo/cohort/models»

Моя структура папок выглядит следующим образом, где afoo является подкаталог "стандартного" SRC/github.com настройки, ссылки в GOPATH:

Folder structure

app.yaml файл достаточно прост:

application: application-id 
version: 1 
runtime: go 
api_version: go1 

handlers: 
    - url: /styles 
    static_dir: styles 

    - url: /scripts 
    static_dir: scripts 

    - url: /.* 
    script: _go_app 

Файл main.go имеет funcs обработчик URL Я определил, например:

func init() { 

    // Register a handler for /. 
    http.HandleFunc("/", MapNetworkHandler) 
} 

импорта модуля в main.go полностью квалифицирован, и выглядеть следующим образом:

"github.com/afoo/cohort/models" 

Google групп имеет длинное обсуждение с 2014 года, которое пытается объяснить правильную настройку папки. Он находится здесь:

https://groups.google.com/forum/#!searchin/google-appengine-go/init/google-appengine-go/dNhqV6PBqVc/Pm2HBrhdCAAJ

Из этой дискуссии, я узнал, что мне нужно, чтобы отделить все модули (здесь, модель, хранилище и утилиты) из основной папки. Но тогда есть некоторые путаные упоминания о других файлах .yaml, которые должны входить в каждую папку модуля, без описания того, как они выглядят, вместе с аллюзиями в файл init (.go) скелета, который каким-то образом импортирует все остальное.

К сожалению, я учился на примере, и я не могу найти хороший пример, который бы мне помог. Я был бы признателен за подробное объяснение правильных структур папок и дополнительных файлов, о которых может знать кто-то.

Спасибо за помощь!

ответ

0

Для кода, который находится в пути к папке вашего проекта, используется относительно app.yaml.

так что если у вас есть:

- Folder: MyProject (can be inside GOPATH/github or any other place) 
    - app.yaml 
    - Folder: MyCode (package mycode) 
    - code1.go 
    - Folder: MySubCode (package mysubcode) 
     - code2.go 

Импорт должен быть, как:

import (
    "mycode" 
    "mycode/mysubcode" 
) 

Обратите внимание, что вы не указали GitHub или что-нибудь еще выше app.yaml для кода, который находится ниже или на том же уровне, что и app.yaml.

Обновление: Я сохраняю папку проекта вне GOPATH. Как:

- ~ (user folder) 
    - GOPATH folder 
    - My GAE projects folder 
    MyProject1 

Таким образом, он прекрасно работает как с импортом из GOPATH как "GitHub/" и от пути относительно app.yaml как "MyProject/"

+0

Спасибо, Александр. Я бы предпочел настроить приложение таким образом, но я получаю сообщение об ошибке «конфликт файлов приложения xxx.go с тем же файлом, который был импортирован из GOPATH.«Согласно комментариям к ссылке« Группы Google »в моем исходном сообщении, эту ошибку следует решить,« сохраняя все ваши файлы yaml и связанные с ними исходные файлы вне вашего GOPATH, а затем импортируйте [любые] необходимые вам пакеты находятся в вашем GOPATH из этих файлов ». Это работает в среде dev, но я не могу его развернуть. – Brent

+0

Попробуйте переместить свой проект за пределы GOPATH - вот как я это делаю, и он работает для меня. обновите ответ с помощью моей настройки. –

+0

Спасибо, Александр. Ваше решение работает как локально, так и для загрузки. Интересно, однако, что моя IDE выбора (VS Code) сообщает об ошибке при импорте моих модулей: «Не удается найти пакет 'models' в любом из: [GOROOT path] [GOPATH path] " Я просто оставлю это. – Brent

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