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