ゴルーチンIDは再利用されない
Go 1.22.5時点では、lgoid を割り当てしているところは2箇所あるが、 oneNewExtraM では最新の値をインクリメントしている。
// func oneNewExtraM()gp.goid = sched.goidgen.Add(1)もうひとつは newproc1 にあって、まとめて確保したIDを順番に割り当てしている。おそらくパフォーマンス向上のためだろう。
// func newproc1(fn *funcval, callergp *g, callerpc uintptr)if pp.goidcache == pp.goidcacheend { // Sched.goidgen is the last allocated id, // this batch must be [sched.goidgen+1, sched.goidgen+GoidCacheBatch]. // At startup sched.goidgen=0, so main goroutine receives goid=1. pp.goidcache = sched.goidgen.Add(_GoidCacheBatch) pp.goidcache -= _GoidCacheBatch - 1 pp.goidcacheend = pp.goidcache + _GoidCacheBatch}newg.goid = pp.goidcachepp.goidcache++なので、順番が前後することはあるが、過去に使用したゴルーチンIDが再利用されることはない。