Maison >développement back-end >Golang >Les canaux Go sont-ils transmis par référence ou par valeur ?

Les canaux Go sont-ils transmis par référence ou par valeur ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-17 18:46:02774parcourir

Are Go Channels Passed by Reference or Value?

Les chaînes sont-elles implicitement transmises par référence ?

La visite guidée Go fournit un exemple de chaînes qui soulève des questions sur leur mécanisme de transmission. En passant un canal dans la fonction somme, les modifications qui y sont apportées au sein de la fonction persistent, laissant ouverte la possibilité de passage de référence implicite.

Explication

Techniquement, les canaux sont copiés lorsqu'ils sont transmis car make crée une mémoire allouée au tas qui agit efficacement comme un pointeur. Cependant, ce pointeur n'est pas exposé, ce qui permet aux canaux d'être traités comme des types de référence.

La spécification précise que la fonction make intégrée renvoie une valeur de type T (et non *T) et initialise la mémoire. Lorsqu'il est utilisé avec des canaux, make initialise le canal et le rend utilisable comme type de référence.

Implications

Ce comportement signifie que lorsque vous transmettez des canaux créés avec make dans des fonctions , vous pouvez y lire et y écrire sans copier les données sous-jacentes.

Types de référence et types de valeur

Les types suivants sont transmis par référence dans Aller :

  • Tranches
  • Cartes
  • Canaux
  • Pointeurs
  • Fonctions

Données les types comme les nombres, les booléens et les structures sont copiés lorsqu'ils sont transmis aux fonctions.

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