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

Практика: Работа с файлами и вводом-выводом


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

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

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

Задание 1: Счётчик строк в файле

Задание 1: Анализатор текста

Создай файл poem.txt с произвольным текстом (стихотворение или рассказ). Программа должна посчитать количество строк, непустых строк и слов. Выведи красивую статистику.


💡 Подсказка

Используй bufio.Scanner для построчного чтения.

Считай строки, проверяй, пустая ли строка (strings.TrimSpace).

Для подсчёта слов используй strings.Fields или strings.Split.

Выведи красивую статистику с эмодзи.

Задание 2: Копировщик файлов с проверкой

Задание 2: Копировщик файлов

Создай файл source.txt с произвольным содержимым. Скопируй его в backup.txt с помощью io.Copy. После копирования сравни размеры файлов и выведи результат. Если backup.txt уже существует — сообщи об этом.


💡 Подсказка

Используй os.Stat для проверки существования и размера файлов.

io.Copy для эффективного копирования.

Проверяй ошибки на всех этапах: открытие, копирование, получение информации.

Выведи прогресс и результат проверки.

Задание 3: Поиск слова в файле

Задание 3: Поисковик по тексту

Создай файл treasure.txt с текстом. Программа ищет заданное слово (регистронезависимо) и выводит номера строк и сами строки с выделением слова.


💡 Подсказка

Используй strings.Contains с strings.ToLower для регистронезависимого поиска.

Для выделения слова можно заменить на жирный текст или обернуть в символы.

Нумеруй строки начиная с 1.

Выведи количество найденных совпадений.

Задание 4: Космический логгер

Задание 4: Логгер миссий

Создай структуру MissionLogger с методом Log(event string). При вызове в файл mission.log добавляется строка с текущим временем. В main симулируй миссию с несколькими событиями.


💡 Подсказка

Используй os.OpenFile с флагом O_APPEND|O_CREATE|O_WRONLY.

Форматируй время через time.Now().Format.

Записывай в файл и выводи в консоль одновременно.

Не забывай закрывать файл или использовать defer.

Задание 5: Read All Lines

Задание 5: Rotate Array — поворот массива (L189)

Дан слайс nums и число k. Поверни слайс вправо на k шагов. Это классическая задача, где часто нужно читать входные данные из файла или строки — здесь мы тренируем работу с данными, которые могли прийти из файла.


💡 Подсказка

Эта задача часто встречается при обработке данных из файлов: массивы чисел из CSV или логов нужно "поворачивать" для анализа.

Эффективное решение: k = k % len(nums), затем реверс всего слайса, потом реверс первых k и последних len-k элементов.

Можно использовать append и срезы.

Не забудь обработать k > len(nums) и k == 0.

Проверь на дополнительных примерах.

Задание 6: Чтение и запись CSV

Задание 6: Работа с CSV — супергерои

Создай файл heroes.csv с колонками Name,Power,Level. Программа читает его, выводит красивую таблицу с уровнем силы в звёздочках и считает средний уровень.


💡 Подсказка

Используй encoding/csv.

Пропусти заголовок или используй его.

Преобразуй уровень из строки в int.

Для звёздочек: повтори "*" (level/10) раз.

Считай среднее как сумма / количество.

Задание 7: Merge Sorted Array

Задание 7: Merge Sorted Array — слияние отсортированных массивов (L88)

Даны два отсортированных слайса nums1 (с запасом места в конце) и nums2. Слей их в nums1 в отсортированном виде. Это часто нужно при обработке данных из разных файлов (логи, измерения).


💡 Подсказка

Эта задача часто возникает при слиянии отсортированных данных из разных источников (файлов, потоков).

Эффективное решение — идти с конца обоих массивов и заполнять nums1 с конца.

Не создавай новый массив — модифицируй nums1 на месте.

Обрабатывай случаи, когда один из массивов пуст.

Проверь на дополнительных примерах.

Задание 8: Сохранение в JSON

Задание 8: Галерея героев в JSON

Создай слайс структур Hero с полями Name, Power, Level. Заполни данными и сохрани в heroes.json с красивым форматированием (MarshalIndent). Выведи содержимое файла.


💡 Подсказка

Используй json.MarshalIndent с префиксом "" и отступом " ".

Записывай в файл через os.WriteFile или bufio.

Выведи содержимое файла после записи.

Проверь, что JSON валидный и читаемый.

Дополнительные материалы

  • Попробуй читать и записывать бинарные файлы
  • Поиграйся с разными буферами и производительностью
  • Добавь обработку ошибок в каждое задание
Совет

Работа с файлами — это мост между твоей программой и внешним миром. Делай её надёжной: всегда проверяй ошибки и закрывай файлы!

Следующий урок

Конкурентность: горутины и каналы.