In Go bestimmt der Umfang von Variablen ihre Zugänglichkeit innerhalb verschiedener Codeblöcke. Wenn lokale Variablen und Konstanten der obersten Ebene oder Variablen auf Paketebene denselben Namen haben, tritt ein häufiges Problem auf: Wie kann auf die Konstante oder Variable auf Paketebene statt auf die lokale verwiesen werden?
Betrachten Sie das folgende Go-Programm:
package main import "fmt" const name = "Yosua" // or var name string = "James" func main() { name := "Jobs" fmt.Println(name) }
Dieses Programm deklariert einen konstanten Namen auf Paketebene, aber innerhalb der Hauptfunktion wird eine andere Variable mit dem Namen name in der Funktion deklariert Ebene. Wenn das Programm ausgeführt wird, gibt es „Jobs“ aus, den Wert des lokalen Variablennamens auf Funktionsebene. Wie können Sie stattdessen auf den Konstantennamen auf Paketebene zugreifen?
Leider bietet Go keine direkte Möglichkeit, auf Bezeichner der obersten Ebene im Bereich eines Blocks zu verweisen, wo Es existiert eine lokale Variable mit demselben Namen. Gemäß der Go-Spezifikation für Deklarationen und Geltungsbereich hat ein lokal deklarierter Bezeichner innerhalb seines Geltungsbereichs Vorrang.
Um sowohl auf die Variable der obersten Ebene als auch auf die lokale Variable zuzugreifen, können Sie Folgendes verwenden: Geben Sie andere Namen ein oder wenden Sie eine der folgenden Problemumgehungen an:
cname := name name := "Jobs" fmt.Println(name) fmt.Println(cname)
Diese Methode speichert den Wert der Konstante oder Variablen der obersten Ebene, bevor die lokale Variable erstellt wird.
func getName() string { return name } name := "Jobs" fmt.Println(name) fmt.Println(getName())
Dieser Ansatz bietet eine alternative Möglichkeit, auf den Wert der obersten Ebene zuzugreifen. Level-Variable durch Definieren einer Funktion, die ihren Wert zurückgibt.
Beide Methoden geben dasselbe zurück Ausgabe:
Jobs Yosua
Dies zeigt, dass Sie auf die Variable der obersten Ebene zugreifen können, während Sie weiterhin eine lokale Variable mit demselben Namen verwenden, indem Sie eine dieser Problemumgehungen verwenden. Es ist jedoch wichtig zu bedenken, dass lokale Variablen innerhalb ihres Gültigkeitsbereichs Vorrang vor Bezeichnern der obersten Ebene haben.
Das obige ist der detaillierte Inhalt vonWie greife ich auf Konstanten oder Variablen auf Paketebene zu, wenn in Go eine lokale Variable mit demselben Namen vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!