Maison  >  Article  >  développement back-end  >  Comment Golang détermine-t-il que la chaîne a été fermée ?

Comment Golang détermine-t-il que la chaîne a été fermée ?

尚
original
2019-12-31 09:45:452970parcourir

Comment Golang détermine-t-il que la chaîne a été fermée ?

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!

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