谷歌应用程序引擎文件冲突golang



所以我正试图用谷歌的应用程序引擎运行我的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

如果我在没有应用程序引擎的情况下运行它,我不会出现任何错误,应用程序运行良好。

根据我的经验,你会出现这个错误,因为你的项目文件夹也在你的GOPATH下。"goapp"可以克隆你的项目文件夹,并根据go环境GOPATH和GOROOT构建它。。。这样做,它会为您在项目中声明的所有包找到重复的符号。

以下是go appengine文档中的解释

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

在同一个链接下,你会发现谷歌为你的项目结构提供了一些建议,其中之一是(你的项目违反了这一准则):

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

如果你想要一个包含应用程序定义和go包的存储库,我鼓励你采用愚蠢的结构:

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

这种结构很方便,并提高了调试体验,正如在使用visual studio代码调试Go appengine模块的文章中所解释的那样

最新更新