我正在按照 https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download
上的说明开始将一些代码从现已弃用的 Files 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:解析输入失败:解析器:在 goapp/src/golang.org/x/net/internal/nettest/error_posix.go 中导入“syscall”错误
我做错了什么?
重现步骤
从 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
- 为 Go 源文件创建一个位置。
% mkdir $HOME/myapp/go
- 将您的 GOPATH 设置为您的源代码的位置
% export GOPATH=$HOME/myapp/go
- 获取 Go 应用引擎示例项目:https://github.com/golang/example
% goapp get github.com/golang/example/appengine-hello
此命令会将示例应用程序下载到 GOPATH 中的第一个路径条目
- 按照 https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download 中的指示安装 Google 云存储客户端库.有关更多详细信息,请引用此问题顶部的步骤。按照说明操作应该会导致您运行 2 个命令:
% go get -u golang.org/x/oauth2
% go get -u google.golang.org/cloud/storage
- 尝试运行您的 go 应用程序
% goapp 服务
您将看到以下编译错误(无堆栈跟踪):
2015/12/23 10:37:07 go-app-builder:解析输入失败:解析器:go/src/golang.org/x/net/ipv6/control_unix 中的错误导入“系统调用”。去
最佳答案
此错误是由以下两种情况之一引起的:
1) 通过导入另一个使用它的包来隐式导入 syscall
,如 this related question 中所述.
2) 将你的包源文件放在你的 GOPATH
目录中,该目录与你的项目的 app.yaml 处于或低于同一级别(例如 app.yaml 在~/go,并在 ~/go/gopath/src 中打包源代码)。如果你的 GOPATH 中存在像 x/net/internal/nettest
这样的包,syscall
导入将在编译时被 goapp
解析并抛出编译错误。
避免这两种情况应该足以防止任何错误的导入“系统调用”
错误或相关的编译错误。
关于google-app-engine - 云存储 API 的错误导入 "syscall",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34144642/