Maison > développement back-end > Golang > le corps du texte

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

Libérer: 2019-12-31 09:45:45
original
2945 Les gens l'ont consulté

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
Copier après la connexion

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
 }()
Copier après la connexion
go func() {
 for i := 0; ; i++ {
 select {
     case <-timeout:
         close(jobs)
         return
 
     default:
         jobs <- i
         fmt.Println("produce:", i)
         }
     }
 }()
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!