Maison > développement back-end > Golang > Comment puis-je modifier correctement les champs Struct dans une Go Map ?

Comment puis-je modifier correctement les champs Struct dans une Go Map ?

Barbara Streisand
Libérer: 2024-12-25 01:07:14
original
997 Les gens l'ont consulté

How Can I Correctly Modify Struct Fields Within a Go Map?

Modifier directement les champs dans une carte de structures dans Go

Dans Go, une carte de int vers struct vous permet d'accéder aux valeurs de la structure en utilisant la clé. Cependant, modifier directement un champ dans la valeur de la structure peut entraîner un comportement inattendu.

Raison de l'indirection

Lorsque vous accédez à la valeur de la structure depuis la carte, vous êtes en fait accéder à une copie de la structure. La modification de cette copie ne modifie pas la structure d'origine dans la carte. Pour changer la structure d'origine, vous devez la lire, la modifier, puis la réécrire sur la carte.

En effet, Go stocke la valeur de la structure dans un emplacement mémoire distinct lorsqu'elle est affectée à la carte. . La modification de la copie n'affecte pas la valeur d'origine.

Coût caché implicite

Il n'y a aucun coût caché implicite dans la modification des champs de structures dans d'autres structures de données comme des tranches ou des cartes . Le comportement est le même que dans le cas d'une carte d'entiers en structures, où les modifications apportées à une copie de la structure n'affectent pas l'original.

Utilisation de pointeurs

Vous pouvez utiliser des pointeurs pour modifier la valeur de structure d'origine en place. En stockant le pointeur vers la structure au lieu de la structure elle-même dans la carte, vous pouvez accéder et modifier directement les champs de la structure d'origine.

Exemple :

import "fmt"

type dummy struct {
    a int
}

func main() {
    x := make(map[int]*dummy)
    x[1] = &dummy{a: 1}
    x[1].a = 2
    fmt.Println(x[1].a) // Output: 2
}
Copier après la connexion

Dans cet exemple, nous accédons à la valeur de la structure à l'aide d'un pointeur, nous permettant de modifier directement ses champs.

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