Dans l'extrait de code fourni, un canal c est créé à l'aide de la fonction make() et transmis à la fonction sum . La question se pose : les canaux sont-ils implicitement passés par référence dans Go, même si aucun pointeur explicite n'est créé ?
La réponse réside dans le comportement unique de make(). Techniquement, les canaux sont copiés, car make() alloue de la mémoire sur le tas, créant ainsi un pointeur en coulisse. Cependant, ce type de pointeur n'est pas exposé, ressemblant à un type de référence.
Selon la spécification Go :
"La fonction intégrée make prend un type T, qui doit être une tranche, type de carte ou de canal, éventuellement suivi d'une liste d'expressions spécifiques au type. Il renvoie une valeur de type T (et non *T)."
En utilisant make(), le canal est initialisé, lui permettant d'être utilisé comme type de référence. Par conséquent, il peut être transmis sans répliquer les données sous-jacentes.
En résumé, les canaux sont effectivement transmis par référence dans Go lorsqu'ils sont créés à l'aide de make. Cela s'applique à d'autres structures de données telles que les tranches, les cartes, les pointeurs et les fonctions. D'un autre côté, les types de données primitifs (nombres, booléens) et les structures mutables 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!