Go语言 为什么这段代码不返回“死锁”错误?

ryoqjall  于 2023-02-20  发布在  Go
关注(0)|答案(2)|浏览(74)
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函数,“死锁”不会出现。

wz3gfoph

wz3gfoph1#

导入net包会启动后台轮询Goroutine,从而有效地禁用死锁检测器。
您可以在此处查看对类似问题的讨论:https://github.com/golang/go/issues/12734

dojqjjoe

dojqjjoe2#

我只能在版本〈= 1.19上重现这个例子。所以你有版本〉= 1.20死锁检测器将工作得很好。看起来这个例子被改变了。

相关问题