Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

bad import "syscall" for cloud storage APIs

I am following the instructions on https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download to begin migrating some code from the, now deprecated, Files API to the new Cloud Storage API without success.

The steps I'm following are ...

I'm running appengine v1.9.23 which is later than the required appengine v1.8.1.

My $GOPATH is set, so I skip step #1.

I proceed to step #2:

goapp get -u golang.org/x/oauth2

goapp get -u google.golang.org/cloud/storage

I am not developing on a managed VM, so I skip step #3.

Now when I run the application, I get:

go-app-builder: Failed parsing input: parser: bad import "syscall" in goapp/src/golang.org/x/net/internal/nettest/error_posix.go

What am I doing wrong?


Steps to reproduce

  • Download an install the Google Appengine runtime, version 1.9.23 from https://console.cloud.google.com/storage/browser/appengine-sdks/featured/ . Follow the installation instructions documented on https://cloud.google.com/appengine/downloads?hl=en

  • Create an appengine project directory:

% mkdir $HOME/myapp

  • Create a new app.yaml file as ~/myapp/app.yaml. Read the directions on the Google website for details: https://cloud.google.com/appengine/docs/go/config/appconfig

I use a version that does not have the static resources:

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

handlers:
- url: /.*
  script: _go_app
  • Create a location for the Go source files.

% mkdir $HOME/myapp/go

  • Set your GOPATH to the location of your sources

% export GOPATH=$HOME/myapp/go

  • Get the Go appengine example project: https://github.com/golang/example

% goapp get github.com/golang/example/appengine-hello

This command will download the example app to the first path entry in the GOPATH

  • Install the Google Cloud Storage client libraries as directed in https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download . Reference the steps at the top of this question for more details. Following the directions should result in you running 2 commands:

% go get -u golang.org/x/oauth2

% go get -u google.golang.org/cloud/storage

  • Attempt to run your go application

% goapp serve

You will see the following compilation error (no stack trace):

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

like image 690
Aaron Alpar Avatar asked Oct 30 '22 14:10

Aaron Alpar


1 Answers

This error is caused by either of two scenarios:

1) Implicitly importing syscall by importing another package that uses it, as referenced in this related question.

2) Having your package source files in your GOPATH located in a directory at or below the same level as your project's app.yaml (eg. app.yaml in ~/go, and packages sources in ~/go/gopath/src). If a package like x/net/internal/nettest exists in your GOPATH the syscall import will be parsed by goapp at compile time and throw the compilation error.

Avoiding these two scenarios should be sufficient to prevent any bad import "syscall" errors or related compilation errors.

like image 169
Adam Avatar answered Nov 11 '22 16:11

Adam