ich eine kleine Go-Anwendung schreibe, dass einige globale consts in main.go wie unten definiert hat:Zugriff auf globale var von Kind Paket
main.go
package main
import (
"github.com/JackBracken/global/sub"
)
const AppName string = "global string"
func main() {
sub.Run()
}
sub/sub.go
package sub
import "fmt"
func Run() {
fmt.Println(AppName)
}
Ich bin ziemlich neu zu gehen und würde erwarten, dass so etwas funktioniert, aber go build
löst den Fehler sub/sub.go:6: undefined: AppName
.
Ich weiß, dass ich so etwas wie die Schaffung ein globals
Pakets tun kann, ist es in sub.go
importieren und zu meinen globalen Variablen mit globals.AppName
usw. beziehen, aber ich würde gerne wissen, ob es meine ursprüngliche Art und Weise möglich ist, oder bin ich nur ganz Missverständnis Scoping und Pakete?
Sie können nicht importieren ein "Haupt" -Paket – JimB
@ JimB Ich verstehe so viel, denke ich. Globale Variablen sind global nur innerhalb des Pakets, in dem sie definiert sind? Und um sie aus einem anderen Paket zu referenzieren, muss dieses Paket importiert werden? Ich nehme an, ich habe die Annahme gemacht, dass ein Unterpaket auf die globalen Variablen seiner Eltern zugreifen kann (aber je mehr ich es einlese, desto weniger scheint die Idee eines "Unterpakets" Sinn zu ergeben). –
Sub-Pakete sind nicht einmal eine Sache in Go. Jedes Paket ist verschieden, sogar von Paketen in dem Verzeichnis, in dem sie ein Unterverzeichnis sind. Dort gibt es keinen impliziten Zugang. Wenn es in Ihrem Paket ist, können Sie es von Haus aus verwenden. Wenn es nicht in Ihrem Paket enthalten ist, müssen Sie es auch importieren, wenn es sich im übergeordneten Verzeichnis befindet. Und leider können Sie 'main' Pakete nicht importieren (außer in einer Testdatei), so dass alles in' package main' nur Zugriff auf dieses Paket hat, Punkt. – Kaedys