2016-04-14 123 views
3

我的应用程序使用Appengine的开发软件可以正常工作。当我尝试部署,我得到这个错误:GO项目的Appengine文件夹结构

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文件拥有我所定义的URL处理器funcs中,例如:

func init() { 

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

模块进口main.go是完全合格的,而像这样:

"github.com/afoo/cohort/models" 

谷歌组从2014年开始进行长时间的讨论,试图解释正确的文件夹设置。它位于在这里:​​

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

从这个讨论中,我了解到,我需要所有模块(在这里,模型,存储库,并utils的)从主文件夹分开。但是有一些令人困惑的提及其他.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

谢谢,亚历山大路径。我宁愿以这种方式设置应用程序,但出现类似“app file xxx.go”与从GOPATH导入的相同文件冲突的错误。“根据我原来发布的关于Google Groups链接的评论,这个错误应该通过”将所有yaml文件及其关联的源文件保存在GOPATH之外,然后导入您需要的任何其他包来解决在你的GOPATH中从这些文件中找到“在开发环境下工作,但我似乎无法部署它 – Brent

+0

尝试将你的项目移动到GOPATH之外 - 我就是这样做的,它适用于我。更新答案与我的设置 –

+0

谢谢,亚历山大。您的解决方案,本地和上传。但有趣的是,我的选择IDE(VS代码)报告导入我的模块时出错: “Can not find package '模型'中的任何一个:[GOROOT路径] [GOPATH路径]“ 我会留下那个。 – Brent