2014-03-13 64 views
2

我一直在關注Google App Engine's Go TutorialGo App Engine項目的包裝結構

根據教程,我應該創建一個根項目目錄,並且與該項目相關的所有源文件都應該進入該目錄。必然地,我的工作區是這樣的:

/MyProject 
/router 
    router.go 
/items 
    items.go 

當我嘗試參考items.go在router.go這樣的:

router.go

import(
    "items" 
) 

func itemsHandler(writer http.ResponseWriter, request * http.Request){ 
    anItem := items.Item{Id: 245,Name: "Chocolate",Price: 1.50}; 
} 

該應用程序失敗編譯是因爲items is undefined,現在我非常困惑Google應用引擎上的Go項目應該如何組織。我想知道的是

  1. 是我的項目目錄應該是位於轉到SDK的gopath目錄還是可以位於任何地方?教程沒有說清楚。

  2. Go App Engine項目的結構如何以及如何導入源文件?

回答

7

看來你問題的原因是缺少src目錄。 。

  1. 是的,您的項目目錄應該在GOPATH。 Go期望按照描述workspaces的文檔中所述的目錄結構進行操作,並且所有包位於src目錄中。編譯時,它會在src文件夾下的gopath中查找軟件包(如果已安裝,則會pkg)。儘管App Engine文檔沒有具體說明這一點,但我的理解是該結構應該匹配src結構。

  2. 目錄結構的一個例子是這樣的:從設置GOPATH=/myproject開始。在GOPATH的目錄中,具有以下結構(使用一些軟件包作爲示例)。

    /src 
    /MyApp/app.yaml 
    /MyApp/myappmain.go 
    /items/items.go 
    /router/router.go 
    

當我建立我給它MyApp文件夾dev_appserver ./MyApp

運行開發應用程序服務器我已經把log.Println("<pkg>")每包init() FUNC測試這一點,他們都只能獲得作爲運行一次出現有些人表示如果你的結構錯誤,這是一個問題。

+0

這是一個很好的答案,謝謝:) –

+1

哇,爲什麼文檔沒有顯示這個。 – Jacob