2016-04-09 7 views
2

So versuche ich meine Go-App mit Google App-Engine zu laufen. Als ich goapp server laufen bekomme ich diesen Fehler:Google App-Engine-Datei Konflikt golang

go-app-builder: Failed parsing input: app file model.go conflicts with same file imported from GOPATH 

Das ist mein Projekt-Layout:

. 
├── model 
│ └── model.go 
├── reqres 
│ └── reqres.go 
├── app.yaml 
├── service.go 
├── main.go 
└── transport.go 

Wenn ich es ohne App Engine laufen ich jede nicht bekommen, Fehler und die App läuft gut.

+0

im Artikel Wenn Sie mit 'goapp' ausführen, verwendet das Tool auch Pakete in Ihrem Arbeitsbereich geht durch den' GOPATH' env Variable definiert, nicht nur Pakete/gehe Dateien in den App-Ordner. Wahrscheinlich haben Sie also auch eine Datei 'model/model.go' in Ihrem' $ GOPATH/src'-Ordner. Ist das so? – icza

+0

@icza ja jeder Dienst, den ich unter '$ GOPATH/src/github.com/meinService 'gebaut habe, hat ein' model/model.go' – Rodrigo

+0

@icza, aber sie haben unterschiedliche Pfade 'github.com/myService/service1/model' 'github.com/myService/service2/model' ist das immer noch ein Problem? – Rodrigo

Antwort

3

Nach meiner Erfahrung erhalten Sie diesen Fehler, weil Ihr Projektordner auch unter Ihrem GOPATH ist. "goapp" klont Ihren Projektordner und baut ihn gegen die Go-Umgebung GOPATH und GOROOT ... Dabei findet er doppelte Symbole für alle Pakete, die Sie in Ihrem Projekt deklariert haben. Hier

ist die Erklärung in go appengine documentation

If you include your package sources in GOPATH, you must be careful not to place the source code at or below any directories in your App Engine project that contain app.yaml files. If that happens, a package could be loaded twice, once for the path relative to a module's directory, and once for the fully-qualified path. This can cause subtle problems, so the Go SDK scans your project and your GOPATH, detects this case, and reports it as an error.

Unter dem gleichen Link finden Sie einige von Google für Ihre Projektstruktur berät und einer von ihnen ist (Ihr Projekt, das Richtlinie brechen):

Do not include any subdirectories in a module's directory.

Wenn Sie ein Repository mit Ihrer Anwendungsdefinition und Pakete gehen wollen, ermutige ich Sie, die folgende Struktur zu übernehmen:

projectRoot 
    |- modules 
    | |- myModule1 
    | | |- init.go  // router pattern to handler 
    | | |- myModule1.yaml // configuration for the module 
    | |- myModule2 
    |  |- init.go  // router pattern to handler 
    |  |- myModule2.yaml // configuration for the module 
    |  
    |- pkg 
    | |- myModule1 
    | | |- *.go   // sources, subfolders(packages) 
    | |      // with handlers and business code 
    | |- myModule2 
    | | |- *.go   // sources, subfolders(packages) 
           // with handlers and business code 

Diese Struktur convinient ist und verbessert die Erfahrung Debuggen als debugging Go appengine module with visual studio code

+0

endlich eine richtige Antwort. Danke – gleroyDroid