Découvrez pourquoi le code évite l'erreur de « blocage » avec l'importation net/http
Problème d'origine :
Le code fourni inclut une fonction qui importe le package net/http mais n'appelle pas la fonction Extract qui utilise le package importé. Dans ce scénario, le code évite étonnamment une erreur de « blocage », tandis que la suppression de l'importation déclenche l'erreur attendue.
Explication :
En général, l'importation du net/ Le package http initialise les Goroutines d'interrogation en arrière-plan chargées de faciliter la communication HTTP. Ces Goroutines désactivent efficacement le mécanisme de détection de blocage.
Détails techniques :
Lorsque Go détecte une situation de blocage, qui se produit lorsqu'un groupe de Goroutines s'attendent sans progressant, il déclenche une erreur « deadlock ». La présence du package net exécutant des Goroutines en arrière-plan introduit une « bouée de sauvetage » supplémentaire au sein du programme, gardant essentiellement le détecteur de blocage activé même si d'autres Goroutines peuvent être bloqués.
Exemple :
L'exemple de code initialise un canal (ch) et y envoie une valeur (1), mais il ne reçoit pas la valeur en retour. Dans un scénario typique, cela entraînerait une erreur de blocage en raison de l'opération de blocage. Cependant, la présence de Goroutines d'arrière-plan net/http empêche la détection des blocages.
Informations supplémentaires :
Pour plus d'informations, reportez-vous à la discussion connexe sur GitHub : https : //github.com/golang/go/issues/12734.
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!