2017-03-13 5 views
4

Ich baue eine einfache App und nach dem Lesen des Dokuments über die Strukturierung Go-Anwendungen, bin ich immer noch verwirrt.Strukturierung lokaler Importe ohne Github in Golang

Ich möchte diese Struktur:

  • Praxis
    • Modelle (als Modelle verpackt)
      • ein
      • b
    • Router (verpackt als Router)
      • ein
      • b

app.go

Innerhalb von app.go, ich habe folgendes:

package main 

import (
    "net/http" 

    // I have tried the following: 
    "practice/models/a" 
    "practice/models/b" 
    "practice/models" 
    "$GOPATH/practice/models/a" 
    "$GOPATH/practice/models/b" 
    "$GOPATH/practice/models" 
    ... 
) 

func main() { 
    http.HandleFunc("/a", AHandler) 
    http.HandleFunc("/b", BHandler) 
    http.ListenAndServe(":8080", nil) 
} 

Die A- und B-Modelle aussehen so:

package models 

import "net/http" 

func AHandler(w http.ResponseWriter, r *http.Request) { 
    // code 
} 

Zwei Fragen:

  1. Was in der Welt ist der richtige Weg, um diese Dateien zu importieren? Muss ich sie wirklich zu Github schieben, um sie referenzieren zu können? Ich verstehe, dass $ GOPATH der Namespace für den gesamten Arbeitsbereich auf einem lokalen Computer ist. Mein $ GOPATH enthält dieses Verzeichnis.

  2. Muss ich eine Hauptmethode innerhalb dieser Dateien definieren? Kann ich nur eine einzelne Funktion exportieren und die Handling-Funktion haben?

Danke.

Ich habe die docs konsultiert

Antwort

5

How to Write Go Code See.

Erstellen Sie Ihre Verzeichnisstruktur unter $ GOPATH/src.

  • $ GOPATH
    • src
      • Praxis
        • Modelle
        • Router

Import die Pakete wie folgt:

import (
    "practice/routers" 
    "practice/models" 
    ... 
) 

Verwenden Sie die importierten Pakete wie folgt aus:

func main() { 
    http.HandleFunc("/a", models.AHandler) 
    http.HandleFunc("/b", models.BHandler) 
    http.ListenAndServe(":8080", nil) 
} 

Sie brauchen nicht zu github.com schieben, auch wenn Sie ' github.com 'im Dateipfad.

Die Hauptfunktion im Hauptpaket ist der Einstiegspunkt für die Anwendung. Definieren Sie keine Hauptfunktionen in anderen Paketen als main.

+2

Vielen Dank! Ich weiß, dass es einfach scheint, aber aus dynamischen, entenartigen Sprachen zu kommen, hat in dieser Hinsicht nicht geholfen. Das macht eine Menge Sinn. Und wenn Sie die Dokumentation nach Ihrer Erklärung noch einmal lesen, scheint das einfach zu sein. – user3162553