Lorsque vous travaillez avec des types d'alias dans Go, on peut se demander si les conversions entre l'alias et son type sous-jacent résultent en exemplaires. Pour explorer cette question, disséquons un exemple :
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(ms)
Question : Ms ou s2 sont-ils des copies complètes de s (comme le seraient []octet(s)), ou est-ce qu'ils représentent simplement des copies de la structure de chaîne (en maintenant un pointeur vers l'original value)?
Réponse :
Selon la spécification Go sur les conversions, "toutes les autres conversions ne changent que le type mais pas la représentation de x." Par conséquent, la conversion vers et depuis le type sous-jacent d’un type personnalisé ne crée pas de copie. Dans ce cas, ms et s2 ne sont pas des copies de s mais simplement des représentations différentes de la même valeur sous-jacente.
Passer des types d'alias aux fonctions :
Lors du passage d'un alias tapez dans une fonction, une copie de la valeur est effectuée. Cependant, la copie ne créera pas réellement une nouvelle instance de la valeur sous-jacente. Par exemple :
func foo(s MyString) { ... } foo(ms(s)) // No copy is made here
Ici, la copie transmise à la fonction est celle du descripteur MyString, et non de la chaîne réelle à laquelle ms fait référence.
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!