"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > La conversion de type d'alias de Go crée-t-elle des copies ?

La conversion de type d'alias de Go crée-t-elle des copies ?

Publié le 2024-12-21
Parcourir:633

Does Go's Alias Type Conversion Create Copies?

L'attribution entre alias déclenche-t-elle la copie dans Go ?

Go permet la définition de types personnalisés à l'aide d'alias. Des inquiétudes surgissent quant à savoir si les conversions entre ces types d'alias entraînent des copies ou simplement des changements structurels.

Considérez cet exemple :

type MyString string 
var s = "very long string"
var ms = MyString(s)
var s2 = string(s)

// Are ms or s2 a full copy of s?

Réponse :

Selon les règles de conversion de Go, les conversions non constantes entre des types numériques ou des chaînes peuvent entraîner un coût d’exécution dû aux changements de représentation. Cependant, toutes les autres conversions, telles que celles entre alias, préservent la représentation originale sans créer de copies.

Par conséquent, ms et s2 ne sont pas des copies complètes de s mais font référence à la même valeur sous-jacente. .

Impact sur les appels de fonctions :

Lors de la transmission de valeurs aux fonctions, des copies sont généralement créées. Toutefois, cela ne s’applique pas aux types d’alias. L'attribution d'une valeur de type alias à un paramètre de fonction ne déclenche pas la copie :

func foo(s MyString){
  ...
}
foo(ms) // No copy is made when passing ms to foo()

En résumé, bien que les conversions entre types d'alias ne créent pas de copies de la valeur sous-jacente, ce principe ne s'étend pas à la transmission de valeurs aux fonctions où les copies sont généralement faites.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3