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

Aar*_*par 5 google-app-engine go

我按照说明https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download开始将现在已弃用的文件API中的一些代码迁移到新的Cloud Storage 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

我不是在托管VM上开发,所以我跳过第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
Run Code Online (Sandbox Code Playgroud)
  • 为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

Ada*_*dam 2

此错误是由以下两种情况之一引起的:

1)syscall通过导入使用它的另一个包来隐式导入,如这个相关问题中所引用的。

2) 将包源文件放在与GOPATH项目的 app.yaml 相同级别或以下的目录中(例如~/go中的app.yaml和~/go/gopath/src中的包源)。如果GOPATH 中存在类似的包,则导入将在编译时被解析并抛出编译错误。x/net/internal/nettestsyscallgoapp

避免这两种情况应该足以防止任何bad import "syscall"错误或相关的编译错误。