Sobes.tech
Back to questions
Middle+
1

Что используют для того, чтобы из одной горутины завершить другую?

Companies where asked
ТБанк

Answer from AI

sobes.tech AI

В Go для того, чтобы из одной горутины завершить другую, обычно используют контексты (context.Context) или каналы.

1. Контекст (context.Context):

  • Создаётся контекст с отменой (context.WithCancel).
  • Передаётся в горутину.
  • Когда нужно завершить горутину, вызывается функция отмены.
  • Горутинa должна периодически проверять состояние контекста и корректно завершаться.

Пример:

ctx, cancel := context.WithCancel(context.Background())
go func(ctx context.Context) {
    for {
        select {
        case <-ctx.Done():
            fmt.Println("Горутина завершена")
            return
        default:
            // работа
        }
    }
}(ctx)

// В другой горутине или после события
cancel() // сигнал завершения

2. Каналы:

  • Создаётся канал сигналов.
  • Горутинa слушает канал и при получении сигнала завершает работу.

Пример:

done := make(chan struct{})
go func() {
    for {
        select {
        case <-done:
            fmt.Println("Горутина завершена")
            return
        default:
            // работа
        }
    }
}()

// Чтобы завершить горутину
close(done)

Таким образом, для управления жизненным циклом горутин используют контексты или каналы, позволяющие безопасно и корректно завершать работу.