# goto утверждения (goto statements)

**Утверждение "goto"** передает управление в утверждение с соответствующей меткой в той же функции.

```
GotoStmt = "goto" Label .
```

```
goto Error
```

Выполнение утверждения "goto" не должно приводить к появлению в области видимости каких-либо переменных, которые еще не находились в области видимости на момент перехода. Например, этот пример:

```
  goto L  // плохо
  v := 3
L:
```

ошибочен, потому что переход к метке L пропускает создание v.

Утверждение "goto" вне блока не может перейти к метке внутри этого блока. Например, этот пример:

```
if n%2 == 1 {
  goto L1
}
for n > 0 {
  f()
  n--
L1:
  f()
  n--
}
```

ошибочен, потому что метка L1 находится внутри блока утверждения "for", а goto нет.
