2014-01-09 70 views
9

我按照本指南安裝AppEngine SDK。 https://developers.google.com/appengine/docs/go/gettingstarted/introduction前往 - 找不到包「appengine」

我最初安裝了Go 1.2和Brew(在OSX上)。我已經把我的路徑:

export GOPATH=$HOME/Documents/go 
export PATH=$GOPATH/bin:$PATH 
export PATH=$HOME/Documents/go/go_appengine:$PATH 

我複製/粘貼的Hello World應用程序,並與goapp serve運行它。都好。

現在,當我嘗試使用appengine

import (
    "appengine" 
) 

我得到編譯時錯誤:

api.go:5:5: cannot find package "appengine" in any of: 
    /usr/local/Cellar/go/1.2/libexec/src/pkg/appengine (from $GOROOT) 
    /Users/jan/Documents/go/src/appengine (from $GOPATH) 

出發指南文檔並沒有說這事。它似乎像SDK有自己的$GOPATH/src,/pkg/bin目錄。我假設我必須始終在SDK和原生Go之間手動切換$GOPATH,這沒有任何意義,甚至不適合我(因爲我主要工作在非appengine的東西上)。

我明顯在這裏做錯了事。我錯過了什麼?

編輯: 似乎實際的appengine服務器正在編譯和運行良好,但是我的整個設置被破壞(測試,Vim ...)。有什麼解決方法嗎?

+0

請嘗試遵循Kyle Finley在他的回答中提供的[steps](https://stackoverflow.com/questions/11286534/test-cases-for-go-and-appengine)。 – alpe1

回答

7

正如alpe1提供,以下行解決VIM編譯器去

ln -s $APPENGINE_SDK/goroot/src/pkg/appengine $GOROOT/src/pkg/ 
ln -s $APPENGINE_SDK/goroot/src/pkg/appengine_internal $GOROOT/src/pkg/ 
mkdir -p $GOROOT/src/pkg/code.google.com/p/ 
ln -s $APPENGINE_SDK/goroot/src/pkg/code.google.com/p/goprotobuf 
$GOROOT/src/pkg/code.google.com/p/ 

,我需要更新gocodelib-path(CF選項)有自動完成應用服務引擎:

gocode set lib-path "$APPENGINE_SDK/goroot/pkg/linux_amd64_appengine" 
+0

唯一的問題是,我使用的第三方庫是爲1.2編譯的,而GAE使用1.1.2,所以'goapp serve'現在給我提供了錯誤。我怎麼能解決這個問題? –

+4

不要這樣做。您不應該將常規Go安裝與Go App Engine SDK相混淆。 – dsymonds

1

你不說什麼版本的Go App Engine SDK你是你唱。確保它是最近從https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go

您應該可以在不對提取的SDK進行任何更改的情況下運行goapp serve(或goapp build,goapp test等)。您只需要將go_appengine的路徑添加到您的PATH即可。

對於常規Go和App Engine,您應該可以擁有一個GOPATH

您的錯誤消息意味着GOROOT是/usr/local/Cellar/go/1.2/libexec。那是當你調用goapp?這不應該發生。如果使用完整路徑$HOME/Documents/go/go_appengine/goapp,有什麼變化嗎?

+0

你是對的。這一切都改變了1.7.4版[描述](https://blog.golang.org/the-app-engine-sdk-and-workspaces-gopath) – hyip

2

對於測試appengine,考慮"appengine/aetest",它取代了關於此問題的其他答案中提到的測試框架。

至於vim,讓我們避免不同的GOROOT目錄之間的符號鏈接。這是最糟糕的錯誤類型和排序:略有不匹配的庫依賴關係。您在推出vim之前是否考慮過簡單地導出不同的GOROOT?你可以將其放到一個別名平凡:

# You could of course drop this in your .bashrc, .bash_profile, or .zshrc 
$ alias appvim="export GOROOT=$APPENGINE_SDK/goroot && vim" 

所有syntastic確實是看在$GOROOT/src對相關包含。通過將$GOROOT更改爲appengine SDK,您將檢查正確的庫。

0

基於克里斯托弗的答案,gocode$GOROOT/pkg中查找符合您的體系結構的路徑(例如$GOROOT/pkg/darwin_amd64)。但是,AppEngine設置中的代碼目錄後綴爲_appengine(例如$GOROOT/pkg/darwin_amd64_appengine)。您可以通過創建一個simlink解決這個矛盾:

export APPENGINE_SDK=/your/appengine/sdk/directory/go_appengine 
ln -s $APPENGINE_SDK/goroot/pkg/your_architecture_appengine $APPENGINE_SDK/goroot/pkg/your_architecture_amd64 

一定要與自己更換上面的AppEngine上的目錄和架構。

這樣做了以後,創建一個別名改變GOROOT和啓動Vim

alias appvim="export GOROOT=$APPENGINE_SDK/goroot && vim" 

克里斯托弗在他的評論中提到。

1

google.golang.org前綴包。

"google.golang.org/appengine"

作品與35年9月1日的版本。