Google app engine 在golang编写的Google应用程序引擎应用程序中使用和测试本地软件包的好方法?

Google app engine 在golang编写的Google应用程序引擎应用程序中使用和测试本地软件包的好方法?,google-app-engine,go,Google App Engine,Go,我在测试我的GAE golang应用程序是否使用本地软件包时遇到问题。 这个问题看起来像这样 . ├── app.yaml ├── main.go └── handler └── handler.go handler程序包在main.go中导入 package main import "handler" 在我开始编写测试之前,一切(例如,goapp-serve)都运行良好。 goapp测试投诉未找到处理程序包。似乎是GOPATH goapp发球和goapp测试是不同的。我找到的一个

我在测试我的GAE golang应用程序是否使用本地软件包时遇到问题。 这个问题看起来像这样

.
├── app.yaml
├── main.go
└── handler
    └── handler.go
handler
程序包在
main.go
中导入

package main

import "handler"
在我开始编写测试之前,一切(例如,
goapp-serve
)都运行良好。
goapp测试
投诉未找到
处理程序
包。似乎是
GOPATH
goapp发球
goapp测试
是不同的。我找到的一个解决办法是
handler
在项目路径之外打包,并将其完全导入 限定名称(例如,
github.com/../handler
),但对我来说没有意义 将项目分割到彼此紧密耦合的单独位置。是 有什么好方法可以使用和测试本地包吗

有关此主题,可以找到以下资源


您需要导入具有完全限定名称的处理程序,但不需要将其移出项目即可。如果项目文件夹如下所示:

/go
└── /myproject
    ├── app.yaml
    ├── main.go
    └── /handler
        └── handler.go
import "myproject/handler"
那么您的处理程序导入应该如下所示:

/go
└── /myproject
    ├── app.yaml
    ├── main.go
    └── /handler
        └── handler.go
import "myproject/handler"

这来得很晚,但如果有人遇到同样的问题,下面是如何处理的:

  • 以这种方式组织代码

    /whereever
    └── /myproject
        └──/src
           ├── app.yaml
           ├── main.go
           └── /handler
               └── handler.go
    
  • 对项目代码使用非限定导入,例如

    import handler
    
  • 从src文件夹内运行
    goapp-service
    goapp-deploy
    。提供/部署与app.yaml相关的工作

    cd /whereever/myproject/src
    goapp serve 
    
  • 设置goapp测试的GOPATH,它基于GOPATH工作

    cd /whereever/myproject    #GOPATH expects a subfolder called src
    GOPATH=$GOPATH:`pwd`       #add the current folder to the GOPATH
    goapp test ./...           #run all tests in any subfolders
    
  • 如有必要,请重置GOPATH

    source ~/.profile #this assumes ~/.profile is where you have permanently set your GOPATH
    

  • 总而言之,“按预期工作”,但仍然很痛苦。

    尝试创建一个应用程序文件夹并移动app.yaml和main.go这是我使用app engine时遇到的问题。问题是,将项目放在GOPATH中,并使用完全限定的名称导入处理程序会导致导入冲突。错误消息是
    go-app-builder:解析输入失败:app-file-handler.go与从GOPATH导入的同一个文件冲突
    。这不起作用,仍然会抱怨
    找不到包“myproject/x”在任何…
    中,确保
    x.go
    文件具有
    package x
    而不是
    package main
    。包的go doc将告诉您要使用的导入路径-请参阅