Junior — Middle
Възможно ли е горутината да бъде прекъсната или да спре сама?
sobes.tech AI
Отговор от AI
В Go изпълнението на горутината може да приключи самостоятелно в няколко случая:
- Горутината е завършила своята функция. Веднага щом функцията, изпълнявана в горутината, приключи, горутината се затваря.
- Паника вътре в горутината. Ако възникне паника в горутината и тя не бъде обработена, тя ще приключи внезапно.
- Отмяна чрез контекст (context). Ако горутината слуша сигнал за отмяна чрез
context.Contextи го получи, може да се затвори правилно.
Важно е да разберете, че горутините не се прекъсват принудително отвън — трябва да реализирате механизъм за спиране сами, например чрез канали или контексти.
Пример за използване на контекст за отмяна на горутина:
ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
for {
select {
case <-ctx.Done():
fmt.Println("Горутината е приключила")
return
default:
// работа
}
}
}(ctx)
// В някакъв момент извикваме cancel()
cancel()
По този начин, горутината се затваря или сама след приключване на работата си, или по сигнал за отмяна, ако е предвидено.