Обработка ошибок функций с несколькими возвращаемыми значениями
Когда функция возвращает множество значений, Go требует, чтобы каждое из них было привязано к переменной. В последнем примере мы делали это, указав имена двух значений, возвращаемых функцией capitalize. Эти имена должны быть разделены запятыми и отображаться слева от оператора :\=. Первое значение, возвращаемое capitalize, будет присвоено переменной name, а второе значение (error) будет присваиваться переменной err. Бывает, что нас интересует только значение ошибки. Ты можешь пропустить любые нежелательные значения, которые возвращает функция, с помощью специального имени переменной blank identifier _.
В следующей программе мы изменили наш первый пример с функцией capitalize для получения ошибки, передав функции пустую строку (""). Попробуй запустить эту программу, чтобы увидеть, как мы можем изучить только ошибку, убрав первое возвращаемое значение с переменной _:
Самое время протестировать код!
Внутри функции main() на этот раз мы присвоим состоящее из заглавных букв имя (строка, возвращаемая первой) переменной с нижним подчеркиванием (_). В то же самое время мы присваиваем error, которую возвращает capitalize, переменной err. Теперь мы проверим, существует ли ошибка в if err ! = nil. Поскольку мы жестко задали пустую строку как аргумент для capitalize в строке _, err :\= capitalize(""), — это условие всегда будет равно true. В результате мы получим вывод Could not capitalize: no name provided при вызове функции fmt.Println в теле условия if. Оператор return после этого будет пропускать fmt.Println("Success!").
Итак, мы познакомились с многочисленными способами создания ошибок с помощью стандартной библиотеки и узнали, как создавать функции, возвращающие ошибки идиоматическим способом. В этих главах мы успешно создали различные ошибки, используя функции errors.New и fmt.Errorf стандартной библиотеки. Ура!
Чтобы углубиться в данную тему, рекомендуем тебе изучить следующие материалы: