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 types numériques ou chaînes peuvent entraîner un coût d'exécution en raison des 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 fonction :
Lors de la transmission de valeurs à 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é, même si 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 à fonctions où des copies sont généralement faites.
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!