Channel est un peu similaire à un pipeline. Il joue un rôle dans la synchronisation et la communication des goroutines. C'est également la clé du modèle CSP de Golang.
La plupart des types dans Golang sont des types valeur (seuls slice/channel/map sont des types référence). Lorsque le type lecture/écriture est un canal de type valeur, si la taille de l'élément est relativement grande, des pointeurs doivent être utilisés. évitez plutôt les surcharges de copie de mémoire fréquentes.
Méthode de Golang pour déterminer si une chaîne a été fermée :
Lors de la lecture d'une chaîne, déterminez si elle a été fermée
_,ok := <- jobs
Si la chaîne est fermée à ce moment-là, fermez, la valeur ok est fausse
Lors de l'écriture sur la chaîne, déterminez si elle a été fermée
1 _,ok. := <- jobs
Si le canal est fermé à ce moment, la valeur ok est fausse. Si le canal n'est pas fermé, un travail sera manqué
Utilisez la sélection. méthode
pour créer un autre canal, appelé timeout, s'il expire, envoyez true à ce canal, envoyez les données au canal des travaux du producteur, utilisez select pour surveiller le délai d'attente, s'il expire, fermez le canal d'emplois.
go func() { time.Sleep(time.Second * 3) timeout <- true }()
go func() { for i := 0; ; i++ { select { case <-timeout: close(jobs) return default: jobs <- i fmt.Println("produce:", i) } } }()
Pour plus de connaissances sur Golang, veuillez faire attention àtutoriel Golang Colonne.
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!