关于 Goroutine 数的疑问

直接上代码

// main.go
package main

import (
    "fmt"
    "runtime"
)

func main() {
    num := runtime.NumGoroutine()
    fmt.Println(num)
}

Go 中 main 函数其实也是跑在协程之下的一个函数.

所以下面这段代码会输出1个协程数, 表示理解.

go run main.go
1

但是在测试环境下

// num_test.go
package main

import (
    "runtime"
    "testing"
)

func TestNum(t *testing.T) {
    t.Log(runtime.NumGoroutine())
}
go test -v num_test.go
=== RUN   TestNum
--- PASS: TestNum (0.00s)
    num_test.go:10: 2
PASS

为什么会默认有2个协程数?
测试的入口函数算1个, 那还有1个哪冒出来的?

觉得还不错点个赞呗!
taadis
讨论数量: 1

也许是检测测试超时死锁的吧,万一你这个测试有问题岂不是永远都测试不完了,总的有外部检测然后终结他吧

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!