谷歌应用引擎文件冲突golang

时间:2016-04-09 16:15:54

标签: google-app-engine go

所以我试图使用谷歌的应用引擎运行我的应用程序。当我运行goapp server时,我收到此错误:

go-app-builder: Failed parsing input: app file model.go conflicts with same file imported from GOPATH

这是我的项目布局:

.
├── model
│   └── model.go
├── reqres
│   └── reqres.go
├── app.yaml
├── service.go
├── main.go
└── transport.go

如果我在没有应用引擎的情况下运行它,我就不会出现任何错误,并且该应用运行正常。

1 个答案:

答案 0 :(得分:3)

根据我的经验,您会收到此错误,因为您的项目文件夹也在您的GOPATH下。 “goapp”克隆您的项目文件夹并根据go环境GOPATH和GOROOT进行构建...这样做可以找到您在项目中声明的所有包的重复符号。

以下是go appengine documentation

中的解释
  

如果您将包源包含在GOPATH中,则必须注意不要将源代码放在App Engine项目中包含app.yaml文件的任何目录之下或之下。如果发生这种情况,可以加载一次包,一次用于相对于模块目录的路径,一次用于完全限定的路径。这可能会导致细微的问题,因此Go SDK会扫描您的项目和GOPATH,检测到这种情况并将其报告为错误。

在同一个链接下,您会发现谷歌为您的项目结构提供一些建议,其中一个是(您的项目打破了该指南):

  

不要在模块的目录中包含任何子目录。

如果您想要一个包含应用程序定义的存储库并转发包,我建议您采用以下结构:

projectRoot
   |- modules
   |   |- myModule1
   |   |    |- init.go        // router pattern to handler
   |   |    |- myModule1.yaml // configuration for the module
   |   |- myModule2
   |        |- init.go        // router pattern to handler
   |        |- myModule2.yaml // configuration for the module
   |    
   |- pkg
   |   |- myModule1
   |   |    |- *.go           // sources, subfolders(packages)
   |   |                      // with handlers and business code
   |   |- myModule2
   |   |    |- *.go           // sources, subfolders(packages)
                              // with handlers and business code

这种结构非常方便,可以改善调试体验,如文章debugging Go appengine module with visual studio code

中所述