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 его используют редко, отдавая предпочтение структурированным подходам. Применяйте его осознанно и только там, где это действительно упрощает код.