Задачи на ошибки в Go. Часть 3
Сделайте функцию readFileSafe с обработкой IO.
Сделайте обёртку tryOperation для логирования ошибок.
Используйте os.ReadFile, strings.TrimSpace и проверку err != nil.
Сделайте пользовательский тип ValidationError.
Сделайте функцию parseEmail с проверкой формата и error.
Обработайте error в goroutine через канал (concept).
Сделайте функцию chainOperations с обработкой ошибок.
Сделайте обёртку результата Result[T] (concept).
Сделайте комплексную задачу с defer и возвратом error.
Объясните, когда не нужно использовать panic.