所以我试图使用谷歌的应用引擎运行我的应用程序。当我运行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
如果我在没有应用引擎的情况下运行它,我就不会出现任何错误,并且该应用运行正常。
答案 0 :(得分:3)
根据我的经验,您会收到此错误,因为您的项目文件夹也在您的GOPATH下。 “goapp”克隆您的项目文件夹并根据go环境GOPATH和GOROOT进行构建...这样做可以找到您在项目中声明的所有包的重复符号。
中的解释如果您将包源包含在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
中所述