Heim > Backend-Entwicklung > Golang > Erstellt der Dereferenzierungsoperator von Go eine Kopie oder einen Verweis auf die Originalstruktur?

Erstellt der Dereferenzierungsoperator von Go eine Kopie oder einen Verweis auf die Originalstruktur?

Barbara Streisand
Freigeben: 2024-11-28 12:29:10
Original
227 Leute haben es durchsucht

Does Go's Dereference Operator Create a Copy or a Reference to the Original Struct?

Go-Dereferenzierung: Kopien oder nicht, das ist hier die Frage

Beim Zugriff auf eine Go-Struktur mit dem Dereferenzierungsoperator (*) können Benutzer möglicherweise Ich frage mich, ob das Ergebnis eine neue Kopie der Struktur oder ein Verweis auf das Originalobjekt ist.

Verstehen des Verhalten

Im bereitgestellten Codeausschnitt:

type me struct {
    color string
    total int
}

func study() *me {
    p := me{}
    return &p
}

obj := *study()
Nach dem Login kopieren

study() gibt einen Zeiger auf eine me-Struktur zurück. Durch die Dereferenzierung in obj wird eine Kopie der Struktur erstellt. Dies geht aus den unterschiedlichen Speicheradressen von &p.color und &obj.color hervor.

Man könnte erwarten, dass die dereferenzierte Struktur obj dieselbe Speicheradresse wie die ursprüngliche Struktur hat, aber das ist in nicht der Fall dieser Instanz. Dieses Verhalten kann auf Gos automatische Freigabe von Variablen am Ende ihres Gültigkeitsbereichs zurückgeführt werden.

Wenn es sich tatsächlich um eine Referenz handelt

Um ein Referenzverhalten zu erreichen, kann man a zuweisen Zeiger direkt auf die Struktur mit:

obj := study()
Nach dem Login kopieren

In diesem Fall ist obj ein Zeiger auf die ursprüngliche me-Struktur und ändert sich in eine davon p oder obj wirken sich auf dieselbe zugrunde liegende Struktur aus.

Schlussfolgerung

Beim Dereferenzieren einer Struktur in Go ist es wichtig zu verstehen, dass das Ergebnis eine Kopie der ursprünglichen Struktur ist es sei denn, ein Zeiger auf die Struktur wird explizit zugewiesen. Dieses Verhalten stellt sicher, dass an der dereferenzierten Struktur vorgenommene Änderungen keine Auswirkungen auf die ursprüngliche Struktur haben, wodurch die Kapselung und Variablenunabhängigkeit gewahrt bleibt.

Das obige ist der detaillierte Inhalt vonErstellt der Dereferenzierungsoperator von Go eine Kopie oder einen Verweis auf die Originalstruktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage