Unveränderliche Strukturen in Go
Frage: Ist es möglich, eine unveränderliche Struktur in Go zu erstellen und dies einmal sicherzustellen? initialisiert, können nur Lesevorgänge für seine Felder durchgeführt werden, ohne deren Werte zu ändern? Wenn ja, wie kann dies erreicht werden?
Antwort:
In Go sind Strukturen von Natur aus veränderbar. Mit bestimmten Techniken ist es jedoch möglich, eine Struktur außerhalb ihres Pakets schreibgeschützt zu machen. So geht's:
Definieren einer unveränderlichen Struktur:
Definieren Sie eine Struktur mit nicht exportierten Feldern (Felder, die mit Kleinbuchstaben beginnen). Dies verhindert den direkten Zugriff auf die Felder von außerhalb des Pakets.
package mypackage type myReadOnly struct { value int }
Bereitstellung von Lesefunktionen:
Erstellen Sie Lesefunktionen, die auf die privaten Felder der Struktur zugreifen können. Diese Funktionen geben Kopien der Felder zurück und stellen so sicher, dass die Originalwerte unverändert bleiben.
func (s myReadOnly) Value() int { return s.value }
Initialisierung der unveränderlichen Struktur:
Erstellen Sie eine Funktion, die die Struktur initialisiert und gibt eine Instanz zurück. Diese Funktion wird verwendet, um neue Instanzen der unveränderlichen Struktur zu erstellen.
func NewMyReadOnly(value int) myReadOnly{ return myReadOnly{value: value} }
Verwendung:
Um die unveränderliche Struktur zu verwenden, importieren Sie das Paket und erstellen Sie eine Instanz mit die Initialisierungsfunktion. Greifen Sie mithilfe der Lesefunktionen auf die Felder zu.
myReadOnly := mypackage.NewMyReadOnly(3) fmt.Println(myReadOnly.Value()) // Prints 3
In diesem Beispiel führt jeder Versuch, das Wertfeld der myReadOnly-Instanz zu ändern, zu einem Kompilierungsfehler, da das Feld nicht exportiert wird. Die Lesefunktion Value bietet eine Möglichkeit, auf das Feld zuzugreifen, ohne es zu ändern. Dieser Ansatz schafft effektiv eine unveränderliche Struktur in Go.
Das obige ist der detaillierte Inhalt vonKönnen Sie in Go unveränderliche Strukturen erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!