La conversion entre les types d'alias dans Go entraîne-t-elle des copies ?
Dans Go, les types personnalisés peuvent être définis comme des alias de types existants. Lors de la conversion entre un type d'alias et son type sous-jacent, il est crucial de comprendre si une copie de la valeur sous-jacente est effectuée.
Réponse :
Conformément à la spécification Go , la conversion vers et depuis le type sous-jacent d'un type personnalisé ne crée pas de nouvelle copie des données. En effet, la conversion modifie simplement le descripteur de type, sans apporter aucune modification à la valeur réelle.
Dans l'exemple suivant :
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s)
Ms et s2 ne sont pas des copies complètes de s . Ce ne sont que des copies de structure de chaîne, qui font référence au même emplacement mémoire sous-jacent. Ceci est différent de l'utilisation de []byte(s) pour convertir en un tableau d'octets, ce qui créerait une nouvelle copie des données.
Lors du passage d'une valeur de type alias à une fonction :
func foo(s MyString){ ... } foo(ms(s))
La valeur est passée par valeur, donc une copie de la structure de chaîne est créée. Cependant, cette copie fait toujours référence aux mêmes données de chaîne sous-jacentes que s. Par conséquent, les modifications apportées à s seront également visibles dans la fonction.
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!