goto
— это оператор безусловного перехода, который позволяет передавать управление программой на указанную метку в пределах той же функции. Хотя его использование часто считается плохой практикой, в некоторых случаях он может упростить код.
func example() {
// ... код до goto
if condition {
goto cleanup // Переход к метке cleanup
}
// ... другой код
cleanup:
fmt.Println("Очистка ресурсов")
}
goto <метка>
, управление передается на строку с меткой метка:
.func divide(a, b int) (int, error) {
if b == 0 {
goto errorHandler // Переход при ошибке
}
return a / b, nil
errorHandler:
return 0, fmt.Errorf("деление на ноль")
}
goto
.return
+ defer
: В Go предпочтительнее использовать defer
для очистки и ранние возвраты.goto
.// Лучший способ без goto
func divideBetter(a, b int) (int, error) {
if b == 0 {
return 0, fmt.Errorf("деление на ноль")
}
return a / b, nil
}
goto
дает заметный прирост.goto
— мощный, но опасный инструмент. В Go его используют редко, отдавая предпочтение структурированным подходам. Применяйте его осознанно и только там, где это действительно упрощает код.