2016-04-14 14 views
3

Meine App funktioniert gut mit Appengine-Entwicklungs-Software. Wenn ich zu implementieren versuchen, bekomme ich diesen Fehler:Appengine Ordnerstruktur für GO-Projekt

main.go: 11: kann nicht importieren finden: „github.com/afoo/cohort/models“

Meine Ordnerstruktur wie folgt aussieht, wo afoo ist ein Unterverzeichnis einer "Standard" src/github.com Einrichtung, in der GOPATH verwiesen:

Folder structure

die app.yaml Datei ist ganz einfach:

application: application-id 
version: 1 
runtime: go 
api_version: go1 

handlers: 
    - url: /styles 
    static_dir: styles 

    - url: /scripts 
    static_dir: scripts 

    - url: /.* 
    script: _go_app 

Die main.go Datei hat die URL-Handler funcs I definiert haben, zum Beispiel:

func init() { 

    // Register a handler for /. 
    http.HandleFunc("/", MapNetworkHandler) 
} 

Modulimporte in main.go voll qualifiziert sind, und sehen wie folgt aus:

"github.com/afoo/cohort/models" 

Google Gruppen hat eine lange Diskussion von 2014, die versucht, die richtige Ordner-Setup zu erklären. Es ist hier zu finden:

https://groups.google.com/forum/#!searchin/google-appengine-go/init/google-appengine-go/dNhqV6PBqVc/Pm2HBrhdCAAJ

Aus dieser Diskussion habe ich gelernt, dass ich alle Module trennen muß (hier Modelle, Repository und utils) aus dem Hauptordner. Aber dann gibt es einige verwirrende Erwähnungen von anderen .yaml-Dateien, die in jeden Modul-Ordner gehen sollten, ohne Beschreibung dessen, wie sie aussehen, zusammen mit Anspielungen auf eine Skelett-Init (.go) -Datei, die irgendwie alles andere importiert.

Für besser oder schlechter, lerne ich mit gutem Beispiel, und ich kann kein gutes Beispiel finden, das mir helfen würde. Ich würde sicherlich jede detaillierte Erklärung der richtigen Ordnerstrukturen und ergänzenden Dateien schätzen, über die jemand Bescheid weiß.

Danke für jede Hilfe!

Antwort

0

Verwenden Sie für Code, der sich in Ihrem Projektordner befindet, den Pfad relativ zu app.yaml.

so, wenn Sie:

- Folder: MyProject (can be inside GOPATH/github or any other place) 
    - app.yaml 
    - Folder: MyCode (package mycode) 
    - code1.go 
    - Folder: MySubCode (package mysubcode) 
     - code2.go 

Die Importe sein sollte:

import (
    "mycode" 
    "mycode/mysubcode" 
) 

Beachten Sie, dass Sie nicht den Github oder irgendetwas anderes über dem app.yaml für Code angeben, die unten ist, ist oder auf der gleichen Ebene wie app.yaml.

Update: Ich halte Projektordner außerhalb von GOPATH. Wie:

- ~ (user folder) 
    - GOPATH folder 
    - My GAE projects folder 
    MyProject1 

diese Weise ist es mit gut funktioniert sowohl den Import von GOPATH ist wie "Github/" und von den Wegen in Bezug auf app.yaml wie "myproject/"

+0

Danke, Alexander. Ich würde es vorziehen, die App auf diese Weise einzurichten, aber ich bekomme einen Fehler so etwas wie "app-Datei xxx.go Konflikte mit der gleichen Datei aus GOPATH importiert."Laut den Kommentaren zum Google Groups-Link in meinem ursprünglichen Beitrag sollte dieser Fehler behoben werden, indem Sie alle YAML-Dateien und die zugehörigen Quelldateien außerhalb Ihres GOPATH aufbewahren und dann alle anderen Pakete importieren, die Sie benötigen "Das funktioniert in der Entwicklungsumgebung, aber ich kann es anscheinend nicht bereitstellen. – Brent

+0

Versuchen Sie, Ihr Projekt außerhalb von GOPATH zu bewegen - so mache ich es und es funktioniert für mich. Ich werde." aktualisieren Sie die Antwort mit meinem Setup –

+0

Danke, Alexander Ihre Lösung funktioniert, sowohl lokal als auch für das Hochladen.Es ist jedoch interessant, dass meine IDE der Wahl (VS-Code) einen Fehler beim Importieren meiner Module meldet: "Kann Paket nicht finden 'Modelle' in jedem von: [GOROOT-Pfad] [GOPATH-Pfad] " Ich werde das einfach lassen. – Brent