In Go ist es möglich, Variablen mit unterschiedlichen Bereichen zu deklarieren: lokal (Funktionsbereich) und auf oberster Ebene (Paket- oder Dateibereich). Gelegentlich kann es vorkommen, dass Sie auf eine Konstante oder Variable der obersten Ebene innerhalb des Funktionsumfangs verweisen möchten, in der eine lokale Variable mit demselben Namen vorhanden ist.
Bedenken Sie den folgenden Codeausschnitt:
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
Frage: Wie können wir auf den Konstantennamen statt auf die lokale Variable verweisen?
Antwort:
Zugriff auf die umschließende Bereichsvariable in Anwesenheit einer gleichnamigen lokalen Variablen ist nicht möglich. Während sich die lokale Variable im Gültigkeitsbereich befindet, überschattet sie die äußere Variable innerhalb der Funktion und macht sie unzugänglich.
In der Go-Sprachspezifikation heißt es:
An identifier declared in a block may be redeclared in an inner block. While the identifier of the inner declaration is in scope, it denotes the entity declared by the inner declaration.
Alternativen:
Wenn Sie gleichzeitig auf die Variablen der obersten Ebene und auf die lokalen Variablen zugreifen müssen, sollten Sie die Verwendung unterschiedlicher Namen in Betracht ziehen. Wenn dies jedoch nicht möglich ist, können Sie auf die folgenden Alternativen zurückgreifen:
Vorübergehend einer neuen Variablen zuweisen:
Zum Beispiel:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
Die Variable der obersten Ebene indirekt verfügbar machen:
Zum Beispiel :
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
Das obige ist der detaillierte Inhalt vonWie greife ich in Go auf eine Konstante oder Variable der obersten Ebene zu, wenn eine lokale Variable mit demselben Namen vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!