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 :
package main
import (
"fmt"
"net/http"
)
func main() {
var ch = make(chan int)
ch Dans ce cas, la fonction main 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 :
package main
import "fmt"
func main() {
var ch = make(chan int)
ch L'erreur de blocage est désormais correctement renvoyée car les Goroutines d'interrogation en arrière-plan ne sont pas actives.
Ce comportement est cohérent avec la discussion dans le problème GitHub : https://github.com/golang /go/issues/12734, où il est expliqué que l'importation du package net/http désactive le détecteur de blocage.
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