Почему этот код не возвращает ошибку взаимоблокировки? - PullRequest
3 голосов
/ 30 октября 2019
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
}

Если я удалю импорт net / http, он вернет ошибку «взаимоблокировки», как и ожидалось. Но если я импортирую этот пакет, хотя я не вызывал функцию Extract, «тупик» не появится.

1 Ответ

9 голосов
/ 30 октября 2019

При импорте пакета net начинается фоновый опрос Goroutines, который эффективно отключает детектор взаимоблокировки.

Вы можете увидеть обсуждение аналогичной проблемы здесь: https://github.com/golang/go/issues/12734

...