2011-11-03 63 views
5

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

我想是这样的:

app/ 
-app.yaml 
-/my_app 
--my_app.go 
--/package1 
---package1.go 

my_app.go上市:

package my_app 

import (
    "http" 
    "./package1" 
) 

func init() { 
    http.HandleFunc("/", package1.index) 
} 

package1.go上市:

package package1 

import (
    "http" 
    "fmt" 
) 

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

我这个情况下,我有一个错误如:

/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 

感谢您的帮助。

回答

1

您需要将软件包链接或复制到应用程序目录。 相对于应用程序目录根目录的路径应该与导入路径匹配。 要使用包1,您应该配置您的应用程序目录,看起来像这样:

app.yaml 
yourapp/yourapp.go 
package1/package1.go 

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

+1

对于一个真实的实例检查https://github.com/haarts/flipco.in使用外部胡须库。 – harm

+2

不幸的是,你错了。我在我的问题上找到了答案。如果我想将包添加到my_app/package1中,我应该写入导入“my_app/package1”。谢谢你的回答。 – Rusfearuth

+0

干草我错了。请注意,“我应该”在我的回应中,这就是我将在package1 import与my_app – dupoxy

6

正如在评论中指出,以dupoxy的回答,在给定导入本地包的方式情况是要导入为"my_app/package1"

import (
    "http" 
    "my_app/package1" 
) 
+2

混合的地方做的事情但请注意,然后您不能像正常一样编译/运行程序,因为这样的相对导入路径将不会在GAE之外工作。你可以在'''main.go'''文件(例如)上使用''+ build!appengine'构建标志来制作一个“混合”应用程序,然后使用完整的包路径导入。然后你的GAE go文件会有相反的结果,''+ build appengine'''把它从正常的构建过程中排除掉。这有点烦人,但工作。 – Tom