大家好,我是煎鱼。 最近金三银四,是面试的季节。在我的 Go 读者交流群里出现了许多小伙伴在讨论自己面试过程中所遇到的一些 Go 面试题。 今天的主角,是大家在既有语言基础的情况下,学 Goroutine 时会容易纠结的一点。就是 “进程、线程都有 ID,为什么 Goroutine 没有 GoroutineID?”。 这是为什么呢,怎么做那些跨协程处理呢? GoroutineID 是什么 我们要知道,为什么大家会下意识的想去要 GoroutineID,下面引用 Go 语言圣经中的表述: 在大多数支持多线程的操作系统和程序语言中,当前的线程都有一个独特的身份(ID),并且这个身份信息可以以一个普通值的形式被很容易地获取到,典型的可以是一个 integer 或者指针值。这种情况下我们做一个抽象化的 thread-local storage(线程本地存储,多线程编程中不希望其它线程访问的内容)就很容易,只需要以线程的 ID 作为 key 的一个 map 就可以解决问题,每一个线程以其 ID 就能从中获取到值,且和其它线程互不冲突。