2015-12-07 1 views
5

Je suis les instructions sur https://cloud.google.com/appengine/docs/go/googlecloudstorageclient/download pour commencer à migrer du code de l'API Files, désormais obsolète, vers la nouvelle API Cloud Storage sans succès.mauvaise importation "syscall" pour les API de stockage en nuage

Les étapes suivantes sont je ...

Je suis en cours d'exécution v1.9.23 AppEngine qui est postérieure à la v1.8.1 AppEngine nécessaire.

Mon $ GOPATH est défini, donc je passe l'étape # 1.

je passe à l'étape # 2:

goapp get -u golang.org/x/oauth2

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

Je ne suis pas en développement sur une machine virtuelle gérée, donc je sauter l'étape 3.

Maintenant, quand je lance l'application, je reçois:

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

Qu'est-ce que je fais mal?


Étapes pour reproduire

% mkdir $HOME/myapp

J'utilise une version qui ne dispose pas des ressources statiques:

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

handlers: 
- url: /.* 
    script: _go_app 
  • Créer un emplacement pour les fichiers source Go.

% mkdir $HOME/myapp/go

  • Définir vos GOPATH à l'emplacement de vos sources

% export GOPATH=$HOME/myapp/go

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

Cette commande va télécharger l'application exemple pour la première entrée de chemin dans le GOPATH

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

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

  • Essayez d'exécuter votre application go

% goapp serve

Vous verrez la com suivant erreur de pilation (pas de trace de la pile):

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

+1

Possible duplication de [projet Golang Appengine ne sera pas construire] (http://stackoverflow.com/questions/33749342/golang-appengine-project-wont-build) – icza

+0

Dans le contexte de la question de référence, ma question pourrait Il est indiqué: "Les instructions fournies par Google sont-elles incorrectes ou suis-je en train de faire quelque chose de mal?" Les instructions semblent indiquer à l'utilisateur d'utiliser une bibliothèque qui nécessite le support 'syscall' avec une plate-forme qui ne le supporte pas. –

+0

Cette erreur fait-elle partie d'une trace de pile plus importante? Pourriez-vous indiquer plus clairement comment quelqu'un pourrait reproduire ce problème? – Nick

Répondre

3

Cette erreur est provoquée par l'un des deux cas de figure:

1) l'importation Implicitement syscall en important un autre paquet qui l'utilise, comme référencé dans this related question.

2) Avoir vos fichiers source package dans votre GOPATH situé dans un répertoire au niveau ou en dessous du même niveau que le app.yaml de votre projet (par exemple. app.yaml dans ~/go et paquets sources ~/go/gopath/src). Si un package comme x/net/internal/nettest existe dans votre GOPATH, l'importation syscall sera analysée par goapp au moment de la compilation et déclenchera l'erreur de compilation. Eviter ces deux scénarios devrait suffire à prévenir les erreurs bad import "syscall" ou les erreurs de compilation associées.

0

Reproduit les étapes initiales ci-dessus et obtenu une erreur similaire, même si elle ne mentionne pas explicitement syscall. Cependant, l'exécution de "goapp serve" dans le répertoire appengine-hello n'entraîne aucune erreur.

L'explication d'Adam au point 2 s'applique ici correctement: il faut placer le fichier app.yaml au bon niveau dans la structure du répertoire.