Практика: Работа с файлами и вводом-выводом
Онлайн редактор кода для 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 валидный и читаемый.
Дополнительные материалы
- Попробуй читать и записывать бинарные файлы
- Поиграйся с разными буферами и производительностью
- Добавь обработку ошибок в каждое задание
Работа с файлами — это мост между твоей программой и внешним миром. Делай её надёжной: всегда проверяй ошибки и закрывай файлы!
Конкурентность: горутины и каналы.