2014-03-29 3 views
6

ich zwei Variablen im globalen Bereich von package main habe, wären jene diese:Zugriff auf globale Variablen über Pakete in Go

var (
    app Application 
    cfg Config 
) 

Jetzt, da die Größe meiner Anwendung zu erhöhen beginnt, habe ich beschlossen, setzt jedes Modul der Website in einem eigenen Paket, ähnlich wie ein Unterverzeichnis wie so:

/src/github.com/Adel92/Sophie 
    + user/ (package user) 
    - register.go 
    - login.go 
    - password.go 
    + topic/ (package topic) 
    - ... etc 
    - main.go (package main) 

wie würde ich um zu gehen um die app und cfg globalen Variablen aus anderen Paketen zugreifen? Ist das der falsche Weg? Ich habe das Gefühl es ist.

In diesem Fall, wie würde ich Funktionen in ihrem eigenen Namespace deklarieren, so dass ich nicht verrückt mit Namen werden müssen, die mit user und topic die ganze Zeit befestigt sind.

Vielen Dank im Voraus.

Antwort

7

Aktivierte Variablennamen werden für den Zugriff in anderen Paketen exportiert, sodass App und Cfg funktionieren würden. Die Verwendung von Unterpaketen für den Namensabstand wird jedoch im Allgemeinen nicht empfohlen. Pakete sind für diskrete, in sich geschlossene Funktionalität gedacht, so dass es normalerweise mehr Probleme gibt, als es wert ist, sie auf diese Weise zu verwenden (zum Beispiel sind Importzyklen absolut unmöglich, wenn Sie also zwei Unterpakete in diesem Layout haben, mit denen Sie sprechen müssen) dann bist du Pech gehabt.

Wenn Sie finden Sie die Dinge mit user und topic um Präfix müssen Namenskollisionen zu vermeiden, dann vielleicht das zugrunde liegende Konzept sollte in sein eigenes Paket einbezogen werden, und Sie können für user und eine eine Instanz davon erstellen für topic?

+0

Das würde keinen Sinn machen, weil Benutzer/Thema keine in sich geschlossenen Dinge sind, sie hängen stark von der Funktionalität des Pakets ab. –

+0

Nun, da es keine besseren Alternativen zu geben scheint, stimme ich dem zu und akzeptiere die Antwort. Vielen Dank. –

+3

Wenn Benutzer/Thema stark von der Funktionalität in main abhängen, bedeutet dies, dass sie in das Hauptpaket gehören sollten. Weil Sie keine Abhängigkeitszyklen haben können, sollten Abhängigkeiten immer nur "abwärts" von main gehen. – Evan