Maison > développement back-end > Golang > Go Conversion de type d'alias : crée-t-il des copies complètes des données sous-jacentes ?

Go Conversion de type d'alias : crée-t-il des copies complètes des données sous-jacentes ?

Barbara Streisand
Libérer: 2024-12-21 16:20:10
original
362 Les gens l'ont consulté

Go Alias Type Conversion: Does it Create Deep Copies of Underlying Data?

Conversion de type d'alias dans Go : crée-t-elle des copies ?

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

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

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!

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