Les canaux sont-ils transmis par référence par défaut ?
Dans Go, la fonction intégrée make crée des instances de tranches, de cartes et de canaux . Ces types ne sont pas directement passés par référence, mais se comportent techniquement comme tels en raison de l'allocation de mémoire sur le tas lors de leur initialisation.
L'exemple de canal suivant démontre ce comportement :
package main import "fmt" func sum(a []int, c chan int) { sum := 0 for _, v := range a { sum += v } c <- sum } func main() { a := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(a[:len(a)/2], c) go sum(a[len(a)/2:], c) x, y := <-c, <-c fmt.Println(x, y, x+y) }
Dans cet exemple, le canal c est initialisé à l'aide de make, créant un comportement de type référence. Toutes les modifications apportées à c dans la fonction sum persistent après la fin de la fonction.
Ce comportement est expliqué plus en détail dans la spécification Go :
La fonction intégrée make prend un type T, qui doit être un type de tranche, 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). La mémoire est initialisée comme décrit dans la section sur l'initialisation valeurs.上是按值传递的。这使得它们可以传递给函数并允许写入或读取,类似于指针的行为。
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!