去 - 找不到包“appengine”

时间:2014-01-09 05:10:15

标签: google-app-engine go

我已按照本指南安装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 ......)。有没有解决方法?

5 个答案:

答案 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 buildgoapp 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"
正如克里斯托弗在评论中提到的那样。