Heim > Backend-Entwicklung > Golang > Erstellt die Dereferenzierung einer Go-Struktur eine Kopie oder eine Referenz?

Erstellt die Dereferenzierung einer Go-Struktur eine Kopie oder eine Referenz?

DDD
Freigeben: 2024-12-13 03:11:12
Original
508 Leute haben es durchsucht

Does Dereferencing a Go Struct Create a Copy or a Reference?

Dereferenzierung von Strukturen in Go: Erstellung neuer Kopien

Bei der Arbeit mit Strukturen in Go ist es wichtig, das Verhalten der Dereferenzierung zu verstehen. Durch die Dereferenzierung eines Objekts wird im Wesentlichen eine Kopie des Werts zurückgegeben, auf den es verweist. Dies kann für einige Programmierer aus anderen Sprachen kontraintuitiv sein, da die Dereferenzierung normalerweise das Objekt selbst zurückgibt.

Betrachten Sie das folgende Go-Code-Snippet:

package main

import (
    "fmt"
)

type me struct {
    color string
    total int
}

func study() *me {
    p := me{}
    p.color = "tomato"
    fmt.Printf("%p\n", &p.color)
    return &p
}

func main() {
    p := study()
    fmt.Printf("&p.color = %p\n", &p.color)

    obj := *p
    fmt.Printf("&obj.color = %p\n", &obj.color)
    fmt.Printf("obj = %+v\n", obj)

    p.color = "purple"
    fmt.Printf("p.color = %p\n", &p.color)
    fmt.Printf("p = %+v\n", p)
    fmt.Printf("obj  = %+v\n", obj)

    obj2 := *p
    fmt.Printf("obj2 = %+v\n", obj2)
}
Nach dem Login kopieren

In diesem Beispiel ist die Studie() Die Funktion erstellt eine neue me-Struktur und gibt einen Zeiger darauf zurück. Diesen Zeiger weisen wir dann einer Variablen p zu. Wenn wir p dereferenzieren und es obj zuweisen, erstellen wir eine neue Kopie der Struktur. Diese neue Kopie hat eine andere Speicheradresse als die ursprüngliche Struktur, auf die p zeigt.

Das bedeutet, dass sich eine Änderung der Felder von obj nicht auf die Felder der ursprünglichen Struktur auswirkt und umgekehrt. Um einen Verweis auf die ursprüngliche Struktur zu erstellen, müssten wir den Zeiger von p auf obj zuweisen:

obj := p
Nach dem Login kopieren

In diesem Fall würden obj und p auf dieselbe Struktur verweisen und alle daran vorgenommenen Änderungen würden dies auch tun sich im anderen widerspiegeln.

Das obige ist der detaillierte Inhalt vonErstellt die Dereferenzierung einer Go-Struktur eine Kopie oder eine Referenz?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage