如何在GAE中导入本地Go包

Rus*_*uth 5 google-app-engine go

如何在Golang + GAE中导入本地包?

我想要这样的东西:

app/
-app.yaml
-/my_app
--my_app.go
--/package1
---package1.go
Run Code Online (Sandbox Code Playgroud)

my_app.go的列表:

package my_app

import (
  "http"
  "./package1"
)

func init() {
  http.HandleFunc("/", package1.index)
}
Run Code Online (Sandbox Code Playgroud)

package1.go的列表:

package package1

import (
  "http"
  "fmt"
)

func index (w http.ResponseWriter, r * http.Request) {
  fmt.Fprint(w, "I'm index page =) ")
}
Run Code Online (Sandbox Code Playgroud)

我这个例子我有一个错误:

/path/to/project/my_app/my_app.go:5: can't find import: ./package1
2011/11/03 10:50:51 go-app-builder: Failed building app: failed running 6g: exit status 1
Run Code Online (Sandbox Code Playgroud)

感谢帮助.

Dar*_*tle 6

正如对dupoxy的回答的评论所述,在给定情况下导入本地包的方法是导入为"my_app/package1":

import (
    "http"
    "my_app/package1"
)
Run Code Online (Sandbox Code Playgroud)

  • 但请注意,您不能像正常情况那样编译/运行程序,因为这样的相对导入路径不能在GAE之外工作.您可以在```main.go```文件(例如)上创建一个带有``+ build!appengine```构建标志的"混合"应用程序,然后使用完整的包路径导入.那么你的GAE go文件会有相反的,```build appengine```将它从正常的go构建过程中排除.这有点烦人但有效. (2认同)

dup*_*oxy 1

您需要将包链接或复制到您的应用程序目录。相对于应用程序目录根的路径应与导入路径匹配。要使用 package1,您应该将应用程序目录配置为如下所示:

app.yaml
yourapp/yourapp.go
package1/package1.go
Run Code Online (Sandbox Code Playgroud)

来自https://groups.google.com/d/msg/golang-nuts/coEvrWIJGTs/75GzcefKVcIJ

  • 不幸的是,你错了。我已经找到了我的问题的答案。如果我想将包添加到 my_app/package1 中,我应该编写 import "my_app/package1"。感谢您的回答。 (2认同)