Sobes.tech
Back to questions
Intern
10

Как правильно передавать контекст в горутине при отправке SMS (двухфакторная аутентификация)?

Companies where asked
Adapty

Answer from AI

sobes.tech AI

В Go для передачи контекста в горутине при отправке SMS (например, для двухфакторной аутентификации) следует использовать пакет context. Контекст позволяет контролировать время жизни операции, отменять её и передавать дополнительные данные.

Правильный способ:

  • Создайте контекст с таймаутом или дедлайном, чтобы ограничить время отправки SMS.
  • Передайте этот контекст в горутину и в функцию отправки.
  • Внутри функции отправки проверяйте отмену контекста, чтобы прервать операцию при необходимости.

Пример:

func sendSMS(ctx context.Context, phone, message string) error {
    select {
    case <-time.After(2 * time.Second):
        // Имитация отправки SMS
        fmt.Println("SMS sent to", phone)
        return nil
    case <-ctx.Done():
        return ctx.Err() // Отмена или таймаут
    }
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
    defer cancel()

    go func() {
        err := sendSMS(ctx, "+1234567890", "Your code is 1234")
        if err != nil {
            fmt.Println("Failed to send SMS:", err)
        }
    }()

    time.Sleep(5 * time.Second) // Ждем завершения
}

Такой подход обеспечивает контроль над временем выполнения и позволяет корректно обрабатывать отмену операции.