Maison > développement back-end > Golang > La conversion de type d'alias de Go crée-t-elle des copies de données ?

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

Susan Sarandon
Libérer: 2024-12-26 10:44:10
original
843 Les gens l'ont consulté

Does Go's Alias Type Conversion Create Data Copies?

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

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

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!

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