我按照https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download
上的说明开始将现已弃用的文件API中的某些代码迁移到新的云存储API,但没有成功。
我跟随的步骤是......
我正在运行appengine v1.9.23,它晚于所需的appengine v1.8.1。
设置了我的$ GOPATH,所以我跳过步骤#1。
我继续第2步:
goapp get -u golang.org/x/oauth2
goapp get -u google.golang.org/cloud/storage
我不是在托管虚拟机上开发,所以我跳过第3步。
现在,当我运行应用程序时,我得到:
go-app-builder: Failed parsing input: parser: bad import "syscall" in goapp/src/golang.org/x/net/internal/nettest/error_posix.go
我做错了什么?
从https://console.cloud.google.com/storage/browser/appengine-sdks/featured/下载安装Google Appengine运行时版本1.9.23。按照https://cloud.google.com/appengine/downloads?hl=en
创建一个appengine项目目录:
% mkdir $HOME/myapp
app.yaml
文件创建为~/myapp/app.yaml
。有关详细信息,请阅读Google网站上的说明:https://cloud.google.com/appengine/docs/go/config/appconfig 我使用的是没有静态资源的版本:
application: myapp
version: alpha-001
runtime: go
api_version: go1
handlers:
- url: /.*
script: _go_app
% mkdir $HOME/myapp/go
% export GOPATH=$HOME/myapp/go
% goapp get github.com/golang/example/appengine-hello
此命令会将示例应用程序下载到GOPATH中的第一个路径条目
% go get -u golang.org/x/oauth2
% go get -u google.golang.org/cloud/storage
% goapp serve
您将看到以下编译错误(无堆栈跟踪):
2015/12/23 10:37:07 go-app-builder: Failed parsing input: parser: bad import "syscall" in go/src/golang.org/x/net/ipv6/control_unix.go
答案 0 :(得分:4)
此错误是由两种情况中的任何一种引起的:
1)通过导入另一个使用它的包隐式导入syscall
,如this related question中所述。
2)将您的包源文件放在GOPATH
位于与项目的app.yaml相同或更低级别的目录中(例如 app.yaml 在〜/ go 中,并在〜/ go / gopath / src 中打包源代码。如果您的GOPATH中存在x/net/internal/nettest
这样的包,则syscall
导入将在编译时由goapp
解析并抛出编译错误。
避免这两种情况应该足以防止任何bad import "syscall"
错误或相关的编译错误。
答案 1 :(得分:0)
重复上面的初始步骤并得到类似的错误,即使没有明确提到系统调用。但是,在appengine-hello目录中运行“goapp serve”会导致完全没有错误。
Adam在第2点的解释在这里适用:需要将app.yaml文件放在目录结构中的正确级别。
答案 2 :(得分:0)
sirupsen/logrus
引用了syscall
。
他们指定了一个appengine标记,不包括syscall,因此它可以在AppEngine中使用,就像issue 310的go build -tags appengine
一样。
但是,我还没有成功将其包含在AppEngine项目中,以便可以将此构建参数转发并指定到某个位置,以便它可以通过。如果可以的话,我会回来更新。