糟糕的导入"系统调用"用于云存储API

时间:2015-12-07 22:37:16

标签: google-app-engine go

我按照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

我做错了什么?

重现步骤

% mkdir $HOME/myapp

我使用的是没有静态资源的版本:

application: myapp
version: alpha-001
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app
  • 为Go源文件创建一个位置。

% mkdir $HOME/myapp/go

  • 将您的GOPATH设置为您的来源位置

% 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

  • 尝试运行您的go应用程序

% 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

3 个答案:

答案 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 310go build -tags appengine一样。

但是,我还没有成功将其包含在AppEngine项目中,以便可以将此构建参数转发并指定到某个位置,以便它可以通过。如果可以的话,我会回来更新。