为什么这段代码没有返回“死锁”错误?

4
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包,那么预期会返回一个“死锁(deadlock)”错误。但如果我导入了这个包,并且没有调用Extract函数,那么“死锁”将不会出现。

1
您的代码已复制到Go Playground,确实会因死锁错误而中止。 - torek
是的,这是真的。但是如果你使用"go run"命令运行它,死锁错误就不会出现,我不知道为什么。 - wei
1
你使用的Go版本是什么?要复现问题,需要做什么具体操作?请参见[mcve]。 - torek
2个回答

10

1
TIL...有趣。 - Jonathan Hall
谢谢您的回复。这个问题困扰了我两天了。您的回复对我非常有帮助,但是我仍然不太清楚细节。 - wei

0

我只能在版本号小于等于1.19的情况下重现这个问题。所以如果你的版本号大于等于1.20,死锁检测器将会正常工作。看起来这个问题已经被修改了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接