2011-11-03 56 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