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
Susan Sarandonoriginal
2024-12-26 10:44:10844parcourir

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)

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))

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!

Déclaration:
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