"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment détecter si le canal est plein?

Comment détecter si le canal est plein?

Publié le 2025-04-14
Parcourir:354

How Can I Detect a Full Buffered Channel in Go?

détectant un canal tamponné complet

dans Go, les canaux tamponnés ont une limite de capacité maximale. Lorsqu'un canal tamponné atteint sa capacité, l'envoi d'objets supplémentaires entraînera généralement le blocage de l'opération. Cependant, il existe des situations où vous préférez peut-être supprimer des éléments au lieu de bloquer.

en utilisant une instruction SELECT avec default

Une façon de déterminer si une chaîne tamponnée est complète est d'utiliser une instruction SELECT avec une clause par défaut. Voici un exemple:

package main

import "fmt"

func main() {
    ch := make(chan int, 1)

    // Fill it up
    ch  

Dans cet exemple, l'instruction SELECT a deux cas:

  • Le premier cas tente d'envoyer la valeur 2 au canal. Si le canal n'est pas plein, l'opération réussira.
  • Le cas par défaut est exécuté si aucun des cas ne peut être immédiatement exécuté. Étant donné que le canal est déjà plein, le cas par défaut sera déclenché et que la valeur 2 sera rejetée.

sortie:

Channel full. Discarding value

Vérification de la taille du canal

Une autre méthode pour détecter un canal complet est de vérifier sa taille en utilisant Len (ch) et la comparer à sa capacité à l'aide de cap (ch).

if len(ch) == cap(ch) {
    // Channel was full, but might not be by now
} else {
    // Channel wasn't full, but might be by now
}

Notez que cette approche ne garantit pas que le résultat sera valide au moment où le bloc IF est entré en raison de la possibilité d'une activité de canal entre la vérification de la taille et l'instruction IF.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3