Перейти к основному содержимому

Практика: Функции


Онлайн редактор кода для Go

Здесь вы можете попробовать свои силы в программировании на языке Go. Для этого мы предоставляем вам онлайн редактор кода, в котором вы можете написать свой код и запустить его.


❗️ При обновлении страницы код пропадёт, по этому, сохраните свой код куда-нибудь, если он важный.

Задание 1 — Простые математические утилиты

Задание 1: Простые математические функции

⏱️ Примерное время: 10-15 минут

Напиши функцию, которая выполняет простое вычисление и возвращает результат.


Требования:

  • функция возвращает одно значение
  • используй понятное имя и типы
  • протестируй в main с разными значениями
  • красиво выводи результат через fmt.Printf

Пример для Max(7, 3): Максимум из 7 и 3 = 7

Задание 2 — Функции с несколькими возвращаемыми значениями

Задание 2: Несколько возвращаемых значений

⏱️ Примерное время: 15-20 минут

Функция возвращает основной результат + дополнительную информацию.


Требования:

  • используй несколько возвращаемых значений
  • можно использовать именованные возвращаемые значения (named returns)
  • в main присваивай и выводи оба/все значения

Пример для DivMod(17, 5): 17 ÷ 5 = 3 остаток 2

Задание 3 — Изменение через указатели

Задание 3: Изменение значений через указатели

⏱️ Примерное время: 15-20 минут

Функция изменяет переданную переменную через указатель.


Требования:

  • функция принимает указатель (*int, *float64, *bool)
  • меняет значение через *param
  • в main покажи значение до и после вызова

Пример:
До: 42
После Double: 84

Задание 4 — Вариадические функции

Задание 4: Функции с переменным числом аргументов

⏱️ Примерное время: 15-20 минут

Напиши функцию, которая принимает любое количество аргументов.


Требования:

  • используй ... (variadic)
  • внутри — цикл for _, v := range nums
  • обработай случай пустого вызова (0 или "")

Пример: Sum(1,2,3,4) → 10

Задание 5 — defer в действии

Задание 5: Отложенные действия с defer

⏱️ Примерное время: 15-20 минут

Добавь логирование входа/выхода функции с помощью defer.


Требования:

  • используй defer fmt.Printf(...)
  • добавь сообщение в начале функции
  • покажи, что defer срабатывает в конце (даже если return раньше)

Пример вывода:
Начало обработки заказа 123
...логика...
Заказ №123 обработан

Задание 6 — Простые замыкания-счётчики

Задание 6: Фабрики счётчиков через замыкания

⏱️ Примерное время: 20-25 минут

Создай функцию, которая возвращает другую функцию-счётчик.


Требования:

  • внешняя функция возвращает func() int или func() string
  • используй замыкание — переменная внутри внешней функции
  • создай 2–3 независимых счётчика и покажи, что они не влияют друг на друга

Пример:
id1() → 1
id1() → 2
id2() → 1000 (независимый)

Задание 7 — Анонимные функции в деле

Задание 7: Анонимные функции и немедленный вызов

⏱️ Примерное время: 15-20 минут

Используй анонимную функцию прямо в месте вызова.


Требования:

  • используй func(...) {...}() — немедленный вызов
  • или присвой анонимку переменной и вызови
  • сделай всё в main

Пример:
Квадрат 7 = 49

Задание 8 — Итоговое: Мини-банк с defer и замыканием

Задание 8: Мини-банк (итоговое)

⏱️ Примерное время: 30-40 минут

Создай систему учёта баланса с логами и бонусами.


Требования:

  • функция MakeBankAccount(start float64) func(string, float64) (float64, string)
    • принимает операцию ("deposit", "withdraw") и сумму
    • возвращает новый баланс и сообщение
  • используй замыкание для хранения баланса
  • defer для логирования каждой операции ("Операция ... выполнена, баланс ...")
  • в main сделай 3–5 операций и покажи историю

Пример вывода:
Депозит 200 → баланс 1200
Списание 50 → баланс 1150
Операция списание выполнена, баланс 1150.00 (от defer)

подсказка

Функции — это сердце Go. Делай их маленькими, понятными и с чёткой ответственностью.