go - 为什么此代码不返回 "deadlock"错误?

标签 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函数,但“死锁”就不会出现。

最佳答案

导入 net 包会启动后台轮询 Goroutine,从而有效禁用死锁检测器。

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

关于go - 为什么此代码不返回 "deadlock"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58619289/

相关文章:

linux - Go:在 exec.Command 中使用字符串时出现奇怪的结果

python - 正确避免读/写文件死锁

initialization - ABAP "SUPPLY": how to use a data-providing function module?

postgresql - 如何避免 Postgres 中的死锁?

c - 死锁预防,随机线程执行顺序C

c - 这个死锁隐藏在哪里?

Json 文件语法验证

go - sqlx 库给出了奇怪的 base64 编码结果

go - 运行 go 应用程序时出现 VS Code 错误

string - 将二进制数据从字节数组转换为字符串并返回 golang 是否安全?