Google app engine 如何让golang gin与google应用程序引擎协同工作?
我的GOPATH是Google app engine 如何让golang gin与google应用程序引擎协同工作?,google-app-engine,go,dev-appserver,google-app-engine-go,dev-appserver-2,Google App Engine,Go,Dev Appserver,Google App Engine Go,Dev Appserver 2,我的GOPATH是$HOME/go,我将项目的源代码放在$HOME/go/src/myproj 有两个文件: app.yaml: application: hello version: 1 runtime: go api_version: go1 handlers: - url: /.* script: _go_app 你好,走吧 package hello import ( "net/http" "github.com/gin-gonic/gin" )
$HOME/go
,我将项目的源代码放在$HOME/go/src/myproj
有两个文件:
app.yaml:
application: hello
version: 1
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
你好,走吧
package hello
import (
"net/http"
"github.com/gin-gonic/gin"
)
func ping(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
}
func init() {
r := gin.Default()
api := r.Group("/api")
{
api.GET("/ping", ping)
}
http.Handle("/", r)
}
package hello
import (
"net/http"
"github.com/gin-gonic/gin"
"./api"
// "myproj/api" // does not work too
)
func init() {
r := gin.Default()
api.addRoute()
http.Handle("/", r)
}
然后运行dev\u appserver.py。
它起作用了
curl http://127.0.0.1:8080/api/ping
{"message":"pong"}
然后我决定分开你好。走这边:
新建您好。开始
package hello
import (
"net/http"
"github.com/gin-gonic/gin"
)
func ping(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
}
func init() {
r := gin.Default()
api := r.Group("/api")
{
api.GET("/ping", ping)
}
http.Handle("/", r)
}
package hello
import (
"net/http"
"github.com/gin-gonic/gin"
"./api"
// "myproj/api" // does not work too
)
func init() {
r := gin.Default()
api.addRoute()
http.Handle("/", r)
}
以及api
文件夹和api/api.go
文件
package api
import (
"github.com/gin-gonic/gin"
)
func ping(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
}
func addRoute() {
api := r.Group("/api")
{
api.GET("/ping", ping)
}
}
然后我再次运行dev_appserver.py.
,但出现以下错误:
错误2018-09-28 05:17:47653实例_factory.py:229]无法生成Go应用程序:(已执行命令:/Users/gaco/.google cloud sdk/platform/google\u appengine/goroot-1.9/bin/go-app-builder-app\u base/Users/gaco/go/src/myproj-api\u version go1-arch 6-dynamic-goroot/Users/gaco/.google cloud sdk/platform/google\u appengine/goroot-1.9-nobuild\u files^$-增量\u重建-不安全-打印额外文件\u hash hello.go api/api.go)
2018/09/28 14:17:47 go app builder:解析输入失败:app file api.go与从GOPATH导入的同一文件冲突
警告2018-09-28 05:17:47654实例。py:297]无法获取实例的PID
错误2018-09-28 05:17:47654 instance.py:300]“\u GoBuildFailureRuntimeProxy”对象没有属性“\u进程”
问题是什么?我如何解决它?我刚刚意识到这是我在自己的应用程序引擎项目中遇到过的一个问题。问题是因为你的
api
文件夹嵌套在你的myproject
文件夹下。SDK不能很好地处理导入,结果是递归导入的,因此出现了2018/09/28 14:17:47 go app builder:解析输入失败:app file api.go与从GOPATH导入的同一文件冲突
错误
实际上,你必须确保你永远不会把东西导入目录,这真的很烦人
要解决这个问题,根据这里的信息,您需要将其分解为一个更扁平的目录结构。如下所示:
myproject/main // or however you want to name it
myproject/api
在裸露的myproject
文件夹中没有任何内容。那么就不可能递归地包含它
作为参考,我自己的项目有一个网站、api、db和第三方api结构,因此我的结构与您所期望的解决方案相同
project/website
project/api
project/db
project/external
请注意,我的网站和api都是独立的服务,因此它们在各自的目录中都有自己的app.yaml
。您只需要一个。同样在我的示例中,两个项目都导入了db
和external
可能重复的