Pourquoi une erreur de blocage n'est-elle pas renvoyée dans ce code ?
Le code fourni importe le package net/http, qui initialise les Goroutines qui exécutent sondage en arrière-plan. Cela désactive par inadvertance le détecteur de blocage, empêchant ainsi le renvoi de l'erreur de blocage attendue.
Pour comprendre ce comportement, considérez l'extrait de code :
<code class="go">package main import ( "fmt" "net/http" ) func main() { var ch = make(chan int) ch <- 1 }</code>
Dans ce cas, la fonction principale crée un canal et y envoie une valeur, provoquant potentiellement un blocage. Cependant, puisque le package net/http a été importé, le détecteur de blocage est désactivé et aucune erreur n'est renvoyée.
Si l'importation est supprimée :
<code class="go">package main import "fmt" func main() { var ch = make(chan int) ch <- 1 }</code>
L'erreur de blocage est désormais correctement renvoyé car les Goroutines d'interrogation en arrière-plan ne sont pas actives.
Ce comportement est cohérent avec la discussion dans le numéro GitHub : https://github.com/golang/go/issues/12734, où il est expliqué que l'importation le package net/http désactive le détecteur de blocage.
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!