【问题标题】:google app engine file conflict golang谷歌应用引擎文件冲突golang
【发布时间】:2023-03-28 14:18:01
【问题描述】:

所以我正在尝试使用谷歌的应用引擎运行我的 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

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

【问题讨论】:

  • 当您使用goapp 运行时,该工具还使用由GOPATH env 变量定义的Go 工作区中可用的包,而不仅仅是应用程序文件夹中的包/go 文件。因此,您的$GOPATH/src 文件夹中很可能还有一个model/model.go 文件。是这样吗?
  • @icza 是的,我在$GOPATH/src/github.com/myService 下构建的每个服务都有一个model/model.go
  • @icza 但他们有不同的路径 github.com/myService/service1/model github.com/myService/service2/model 这仍然是一个问题吗?

标签: google-app-engine go


【解决方案1】:

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

这里是go appengine documentation中的解释

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

在同一链接下,您会发现 google 为您的项目结构提供的一些建议,其中之一是(您的项目违反了该指南):

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

如果您想要一个包含应用程序定义和 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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多