Оператор goto
Оператор goto выполняет безусловный переход к метке в пределах одной функции.
Метка представляет собой идентификатор, после которого ставится двоеточие.
Оператор goto позволяет передать управление на строку с указанной меткой,
минуя промежуточный код. В качестве метки можно использовать любой допустимый
идентификатор Go.
Синтаксис
goto label
// ...
label:
// код после метки
Пример
Давайте используем оператор goto для создания простого цикла,
который выводит числа от 1 до 5:
package main
import "fmt"
func main() {
i := 1
start:
if i > 5 {
goto end
}
fmt.Println(i)
i++
goto start
end:
fmt.Println("Loop finished")
}
Результат выполнения кода:
1
2
3
4
5
"Loop finished"
Пример
Давайте используем goto для выхода из вложенного цикла при выполнении
определенного условия:
package main
import "fmt"
func main() {
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
if i == 2 && j == 2 {
goto found
}
fmt.Printf("i=%d, j=%d\n", i, j)
}
}
fmt.Println("Not found")
return
found:
fmt.Println("Found at i=2, j=2")
}
Результат выполнения кода:
"i=0, j=0"
"i=0, j=1"
"i=0, j=2"
"i=0, j=3"
"i=0, j=4"
"i=1, j=0"
"i=1, j=1"
"i=1, j=2"
"i=1, j=3"
"i=1, j=4"
"i=2, j=0"
"i=2, j=1"
"Found at i=2, j=2"
Пример
Давайте продемонстрируем, что оператор goto не может перепрыгивать
через объявление переменных:
package main
import "fmt"
func main() {
goto skip
x := 10
skip:
// x не доступна здесь, так как объявление пропущено
fmt.Println("Skipped variable declaration")
// fmt.Println(x) // Это вызовет ошибку компиляции
}
Результат выполнения кода:
"Skipped variable declaration"