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
DDDOriginal
2024-12-13 03:11:12557Durchsuche

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)
}

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

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!

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