为什么此代码不返回“死锁”错误?

时间:2019-10-30 05:34:35

标签: go deadlock

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 个答案:

答案 0 :(得分:9)

导入net程序包将启动后台轮询Goroutine,这些Goroutine有效地禁用了死锁检测器。

您可以在此处查看有关类似问题的讨论:https://github.com/golang/go/issues/12734