Maison > développement back-end > Golang > Le déréférencement d'une structure Go crée-t-il une nouvelle copie ?

Le déréférencement d'une structure Go crée-t-il une nouvelle copie ?

Patricia Arquette
Libérer: 2024-12-01 04:58:13
original
546 Les gens l'ont consulté

Does Dereferencing a Go Struct Create a New Copy?

Le déréférencement d'une structure crée-t-il une nouvelle copie dans Go ?

Dans Go, lorsqu'une variable d'un type struct est passée par référence à l'aide l'opérateur astérisque (*), une idée fausse peut survenir selon laquelle la variable déréférencée représente la même adresse que l'original struct.

Cependant, comme démontré dans l'extrait de code donné :

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) // Address of p.color
    return &p
}

func main() {
    p := study() // p is a pointer to a struct
    fmt.Printf("&p.color = %p\n", &p.color) // Address of p.color

    obj := *p // obj is a copy of the struct pointed to by p
    fmt.Printf("&obj.color = %p\n", &obj.color) // Address of obj.color

    fmt.Printf("obj = %+v\n", obj)

    p.color = "purple" // Changes color of the struct pointed by p
    fmt.Printf("p.color = %p\n", &p.color)
    fmt.Printf("p = %+v\n", p)
    fmt.Printf("obj  = %+v\n", obj)

    obj2 := *p // Another copy is made
    fmt.Printf("obj2 = %+v\n", obj2)
}
Copier après la connexion

Lorsque nous exécutons ce code, la sortie montre que la variable déréférencée obj a une adresse différente de celle de la struct p d'origine . En effet :

Le déréférencement crée une nouvelle copie :

La ligne obj := *p crée une nouvelle variable obj du même type que p (moi), et l'initialise avec une copie de la valeur pointée par p. Cela signifie que toute modification apportée à obj n'affectera pas la structure d'origine.

Attribuer efficacement une nouvelle valeur de structure à une autre :

Similaire à var obj me = *p , l'opération de déréférencement dans obj := *p attribue une nouvelle valeur de structure à la variable obj. Cela crée une nouvelle copie avec une mémoire séparée.

Utilisez l'opérateur astérisque avec prudence :

Bien que l'opérateur astérisque fournisse la sémantique du pointeur, il est important de comprendre ses effets sur les variables. . Lorsqu'une valeur est attribuée avec l'opérateur * (déréférencement), elle crée une nouvelle copie, pas une nouvelle référence à la variable d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal