Циклы и функции

Объявление функций, параметры, несколько возвращаемых значений и область видимости

Содержание курса

В предыдущем уроке вы управляли потоком выполнения через циклы: повторяли блок кода, пока выполняется условие, и досрочно выходили через break. Теперь пора научиться выносить логику в отдельные именованные блоки — функции. Это принципиальный шаг: код перестаёт быть одним длинным main, а отдельные задачи получают собственное имя и границы.

Синтаксис объявления функции: параметры и возвращаемый тип

Функция в Go объявляется ключевым словом func, за ним — имя, список параметров в круглых скобках и, если функция что-то возвращает, тип результата:

func add(a int, b int) int {
    return a + b
}

Здесь a и b — параметры типа int, а int после закрывающей скобки — тип возвращаемого значения. Когда выполнение доходит до return a + b, функция немедленно завершается и передаёт вычисленное значение обратно туда, откуда её вызвали.

Если несколько параметров имеют одинаковый тип, их можно объединить — тип пишется один раз в конце группы:

func add(a, b int) int {
    return a + b
}

Оба варианта полностью эквивалентны; сокращённая форма просто убирает дублирование.

Вызов функции выглядит предсказуемо:

result := add(3, 5)
fmt.Println(result) // 8

add(3, 5) — это выражение, которое вычисляется в 8, и это значение присваивается result.

Если функции нечего возвращать — например, она только печатает что-то — тип после скобок просто не указывается:

func greet(name string) {
    fmt.Println("Hello,", name)
}

В таком случае return можно писать без аргумента или вовсе опустить — функция завершится, когда выполнение дойдёт до закрывающей фигурной скобки.

Один важный момент про return: он останавливает выполнение функции в той точке, где стоит. Весь код ниже return в том же блоке уже не выполнится. Именно это свойство мы используем чуть позже, когда нужно выйти из функции по условию раньше времени.