Comment vérifier si un canal tamponné est plein
Dans Go, les canaux tamponnés ont une capacité limitée pour stocker des données. Lorsque le canal est plein, l’envoi de données bloquera l’expéditeur. Cependant, si vous souhaitez supprimer des données au lieu de les bloquer, comment pouvez-vous déterminer si le canal est plein ?
Solution utilisant l'instruction Select
Une façon de vérifier si un Le canal tampon est plein consiste à utiliser l'instruction select avec un cas par défaut. Si aucun des cas ne peut être exécuté, comme l'envoi de données à un canal complet, le cas par défaut sera exécuté.
package main import "fmt" func main() { ch := make(chan int, 1) // Fill it up ch <- 1 select { case ch <- 2: // Put 2 in the channel unless it is full default: fmt.Println("Channel full. Discarding value") } }
Sortie :
Channel full. Discarding value
Ce code crée un canal tamponné de taille 1 et envoie une valeur pour le remplir. L'instruction select tente ensuite d'envoyer une autre valeur au canal. Si le canal est plein, le cas par défaut est exécuté, en imprimant un message et en supprimant la valeur.
Vérifier sans envoi
Alternativement, vous pouvez vérifier le nombre d'éléments mis en file d'attente dans un canal en utilisant len(ch). Cela vous permet de déterminer si un canal est plein sans tenter d'envoyer des données.
if len(ch) == cap(ch) { // Channel was full, but might not be by now } else { // Channel wasn't full, but might be by now }
Cependant, notez que le résultat de la comparaison peut devenir invalide au moment où vous entrez le bloc if en raison d'un flux de données simultané. .
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!