Warum wird in diesem Code kein Deadlock-Fehler zurückgegeben?
Der bereitgestellte Code importiert das Net/http-Paket, das ausgeführte Goroutinen initialisiert Hintergrundabfrage. Dadurch wird versehentlich der Deadlock-Detektor deaktiviert und verhindert, dass der erwartete Deadlock-Fehler zurückgegeben wird.
Um dieses Verhalten zu verstehen, betrachten Sie den Codeauszug:
<code class="go">package main import ( "fmt" "net/http" ) func main() { var ch = make(chan int) ch <- 1 }</code>
In diesem Fall erstellt die Hauptfunktion eine Kanal und sendet einen Wert hinein, was möglicherweise einen Deadlock verursacht. Da jedoch das net/http-Paket importiert wurde, ist der Deadlock-Detektor deaktiviert und es wird kein Fehler zurückgegeben.
Wenn der Import entfernt wird:
<code class="go">package main import "fmt" func main() { var ch = make(chan int) ch <- 1 }</code>
Der Deadlock-Fehler ist jetzt korrekt zurückgegeben, weil die Hintergrundabfrage-Goroutinen nicht aktiv sind.
Dieses Verhalten steht im Einklang mit der Diskussion im GitHub-Problem: https://github.com/golang/go/issues/12734, wo das Importieren erläutert wird Das Paket net/http deaktiviert den Deadlock-Detektor.
Das obige ist der detaillierte Inhalt vonWarum ist die Deadlock-Erkennung beim Importieren des Net/Http-Pakets deaktiviert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!