由于滥用的可能性很高,因此无法访问Go中当前goroutine的标识符。这可能看起来很苛刻,但这实际上保留了Go软件包生态系统的重要属性:
启动新的goroutine做某事并不重要 。
也就是说,对于函数F的任何方法:
F()
几乎完全等同于:
done := make(chan struct{})go func() { defer close(done) F()}<-done(“几乎”来自以下事实:如果F发生恐慌,那么原始goroutine将不会抓住该恐慌)。
这也适用于日志记录-
如果您正在使用当前goroutine来推断当前用户,则如上所述启动任何新goroutine的任何代码都会破坏该假设,并且您的日志记录将不包含预期的信息。
您需要传递某种上下文。



