Там все примерно так работает:
- В определенных точках компилятор вставляет код, который выставляет флаг или семафор "можно прерываться".
- Планировщик периодически вызывает isAsyncSafePoint, который этот флаг проверяет. Если он выставлен, тогда он забирает управление у горутины.