Heim >Backend-Entwicklung >Golang >Wie greife ich auf Konstanten oder Variablen auf Paketebene zu, wenn in Go eine lokale Variable mit demselben Namen vorhanden ist?

Wie greife ich auf Konstanten oder Variablen auf Paketebene zu, wenn in Go eine lokale Variable mit demselben Namen vorhanden ist?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-16 11:21:03913Durchsuche

How to Access Package-Level Constants or Variables When a Local Variable with the Same Name Exists in Go?

Referenzieren von Konstanten oder Variablen auf Paketebene über Variablen auf Funktionsebene

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?

Das Problem

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?

Keine direkte Referenz

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.

Problemumgehungslösungen

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:

Speichern Sie zuerst den Wert der obersten Ebene

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.

Verwenden einer Funktion für den Zugriff auf den Wert der obersten Ebene

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.

Ausgabe

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn