正規の方法では、 runtime/debug.Stack が返すスタックトレースにゴルーチンIDとゴルーチンの状態が含まれるので、文字列としてパースすればゴルーチンIDを取得できる。
s := string(debug.Stack()) // goroutine xxx [status]
Go 1.22時点では、この関数は最終的に runtime パッケージで g 構造体をみている。
gp := getg()print("goroutine ", gp.goid)