在Golang的FAQ中,解释了为什么goroutine
是匿名的,没有暴露出ID等状态信息,主要是因为如果一个特定的goroutine
有了名字(ID),开发者就会忽略使用多个goroutine
来处理信息的可能,从而限制库的使用。
但是,有时候开发者也需要获取goroutine
来进行特定的操作。本文介绍如何从堆栈信息中获取goroutine信息。
panic获取堆栈信息
当go程序panic
的时候,会打印出goroutine
的ID, 状态,函数,调用栈的信息。
func TestPanic(t *testing.T){
panic("get stack info")
}
堆栈信息
goroutine 18 [running]:
testing.tRunner.func1.1(0x111b7e0, 0x116c710)
/usr/local/go/src/testing/testing.go:1076 +0x30d
testing.tRunner.func1(0xc000082600)
/usr/local/go/src/t