Задачи Go на массивы, срезы и map с проверкой кода

Четыре задачи Go на перебор и коллекции: цикл с continue, массив фиксированного размера, срез после append и проверка ключа map. Все упражнения проверяют код; заполняйте решение по интерфейсу конкретной задачи.

Чем отличаются структуры

У массива длина входит в тип. Срез описывает участок базового массива и хранит длину и ёмкость. Несколько срезов могут разделять одно хранилище, поэтому изменение элемента через один из них может быть видно через другой.

append возвращает новый заголовок среза. Если ёмкости хватает, он может использовать прежний базовый массив; если не хватает — выделяется другое хранилище. Поэтому результат append нужно присваивать, а влияние на другие срезы проверять по конкретным len, cap и индексам.

Отдельная ловушка map

Для map[string]int чтение отсутствующего ключа возвращает 0. Но сохранённый 0 тоже допустим. Два результата value, ok := m[key] различают эти ситуации. Если после delete нужно сообщить, существовал ли ключ, проверку ok выполните до удаления. Порядок обхода map не гарантируется.

Как проходить набор

Сначала отработайте перебор, затем выпишите типы и ожидаемые размеры результата. В задаче на append нарисуйте базовый массив и диапазоны срезов. В задаче на map отдельно проверьте существующий ключ со значением 0 и отсутствующий ключ. Автоматическая проверка помогает проверить итог, а объяснение причины ошибки остаётся частью вашей работы.

Задачи в подборке

  1. Go for и continue: пропуск чётных чисел в цикле.
  2. Go: обход массива [7]int и возврат среза []int.
  3. Go append и базовый массив: почему меняется исходный срез.
  4. Go map: проверка существования ключа и удаление нулевого значения.

Проверка доступна без регистрации. Для сохранения прогресса переходите в соответствующий урок курса. Курс с объяснениями по порядку.