我已按照本指南安装AppEngine SDK。 https://developers.google.com/appengine/docs/go/gettingstarted/introduction
我最初使用Brew安装Go 1.2(在OSX上)。我设定了自己的路径:
export GOPATH=$HOME/Documents/go
export PATH=$GOPATH/bin:$PATH
export PATH=$HOME/Documents/go/go_appengine:$PATH
我复制/粘贴了hello world app,并使用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
dir与/src
,/pkg
和/bin
。我假设我必须一直手动切换SDK和本地Go之间的$GOPATH
,这没有任何意义,甚至不适合我(因为我主要处理非appengine的东西)。
我在这里显然做错了。我错过了什么?
编辑: 看起来实际的appengine服务器正在编译并运行正常,但是我的整个设置都被破坏了(测试,Vim ......)。有没有解决方法?
答案 0 :(得分: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/
我需要更新 gocode lib-path(参见选项),以便为appengine设置自动完成:
gocode set lib-path "$APPENGINE_SDK/goroot/pkg/linux_amd64_appengine"
答案 1 :(得分:2)
为了测试appengine,请考虑"appengine/aetest"
,它取代了有关此问题的其他答案中提到的测试框架。
至于vim
,让我们避免在不同的GOROOT
目录之间进行符号链接。这是最糟糕的错误和排序的一个秘诀:库依赖性略有不匹配。您是否考虑过在发布GOROOT
之前导出其他vim
?您可以将其简单地删除为别名:
# 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,您将检查正确的库。
答案 2 :(得分:1)
您没有说明您使用的是什么版本的Go App Engine SDK。确保它是https://developers.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go中的最新内容。
您应该能够运行goapp serve
(或goapp build
,goapp test
等),而无需对提取的SDK进行任何更改。您只需要将go_appengine的路径添加到PATH
。
对于常规Go和App Engine,您应该只能拥有一个GOPATH
。
您的错误消息表示GOROOT为/usr/local/Cellar/go/1.2/libexec
。当你调用goapp
时是这样吗?这不应该发生。如果您使用完整路径$HOME/Documents/go/go_appengine/goapp
?
答案 3 :(得分:1)
使用google.golang.org
前缀包,例如
"google.golang.org/appengine"
适用于1.9.35版。
答案 4 :(得分:0)
在Christopher的回答的基础上,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"
正如克里斯托弗在评论中提到的那样。