Maison  >  Article  >  développement back-end  >  Comment l’importation du package net/http dans Go affecte-t-elle la détection des erreurs de blocage ?

Comment l’importation du package net/http dans Go affecte-t-elle la détection des erreurs de blocage ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-25 03:29:02933parcourir

How does importing the net/http package in Go affect deadlock error detection?

Éviter les erreurs de blocage avec les importations HTTP Go

Dans Go, l'utilisation du package net/http pour la communication HTTP introduit un comportement subtil qui peut affecter la détection des blocages.

Considérez le code suivant :

<code class="go">package main

import (
    "fmt"
    "net/http"
)

func Extract(url string) ([]string, error) {
    http.Get(url)

    var links []string
    return links, nil
}

func crawl(url string) []string {
    list, _ := Extract(url)
    return list
}

func main() {
    var ch = make(chan int)
    ch <- 1
}</code>

Sans l'import net/http, l'exécution de ce code entraînerait une erreur "deadlock". En effet, la fonction Extract est bloquée sur une requête HTTP sans appel correspondant à ServeHTTP ou Close.

Cependant, si le package net/http est importé, même sans appeler la fonction Extract, l'erreur "deadlock" disparaît. En effet, l'importation du package net démarre l'interrogation en arrière-plan des Goroutines qui communiquent automatiquement avec le serveur HTTP.

Ce comportement est documenté dans le billet de blog Go "Goroutine Pooling in NetHttp":

"The net Le package démarre une simple goroutine d'arrière-plan qui teste périodiquement l'accessibilité au serveur HTTP. La goroutine de test simple se termine si le serveur HTTP n'est pas accessible, puis redémarre lorsque le serveur devient accessible. Cela garantit que les goroutines qui ont net.Dial dans leur appel. pile ne sont pas signalés par erreur comme étant bloqués. détection de blocage, il est recommandé d'éviter d'importer le package net jusqu'à ce qu'il soit nécessaire d'établir la communication avec un serveur HTTP.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn