Назад к вопросам
Intern
11
Как правильно передавать контекст в горутине при отправке SMS (двухфакторная аутентификация)?
Компании, где спрашивали
Adapty
Ответ от нейросети
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) // Ждем завершения
}
Такой подход обеспечивает контроль над временем выполнения и позволяет корректно обрабатывать отмену операции.