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

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

DDD
Libérer: 2024-12-13 03:11:12
original
508 Les gens l'ont consulté

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

Déréférencement de structures dans Go : création de nouvelles copies

Lorsque vous travaillez avec des structures dans Go, il est important de comprendre le comportement du déréférencement. Le déréférencement d’un objet renvoie essentiellement une copie de la valeur vers laquelle il pointe. Cela peut être contre-intuitif pour certains programmeurs provenant d'autres langages, où le déréférencement renvoie généralement l'objet lui-même.

Considérez l'extrait de code Go suivant :

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)
}
Copier après la connexion

Dans cet exemple, l'étude() La fonction crée une nouvelle structure me et renvoie un pointeur vers celle-ci. On assigne ensuite ce pointeur à une variable p. Lorsque nous déréférençons p et l'attribuons à obj, nous créons une nouvelle copie de la structure. Cette nouvelle copie a une adresse mémoire différente de la structure d'origine pointée par p.

Cela signifie que la modification des champs d'obj n'affectera pas les champs de la structure d'origine, et vice versa. Pour créer une référence à la structure d'origine, nous aurions besoin d'attribuer le pointeur de p vers obj :

obj := p
Copier après la connexion

Dans ce cas, obj et p pointeraient vers la même structure et toute modification apportée à l'une d'entre elles le ferait se refléter dans l'autre.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal