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

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


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

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


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

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

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

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

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


Требования:

  • используй bufio.Scanner для построчного чтения
  • считай: общее кол-во строк, непустых строк, слов (strings.Fields), символов
  • выведи статистику с эмодзи и средней длиной строки

Пример вывода:

📄 text.txt
Строк всего: 12
Непустых строк: 10
Слов: 89
Символов: 456
Средняя длина строки: 38 символов

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

Задание 2: Надёжный копировщик файлов

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

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


Требования:

  • используй io.Copy для копирования
  • проверь существование backup.txt через os.Stat
  • если файл существует — спроси у пользователя (fmt.Scanln)
  • выводи размер исходного и скопированного файла
  • при ошибке — красивое сообщение

Пример вывода:

backup.txt уже существует (1.2 MB). Перезаписать? (y/n): y
Копирование успешно. Размер: 1.2 MB

Задание 3 — Простой логгер миссий

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

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

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


Требования:

  • os.OpenFile с O_APPEND|O_CREATE|O_WRONLY
  • fmt.Fprintf с временем: 2025-01-26 14:30:45 - Событие: ...
  • в main несколько вызовов Log
  • выведи содержимое файла после миссии

Пример файла mission.log:

2025-01-26 14:30:45 - Старт двигателей
2025-01-26 14:30:47 - Выход на орбиту
2025-01-26 14:30:50 - Миссия успешна!

Задание 4 — Чтение и запись CSV — супергерои

Задание 4: Супергерои в CSV

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

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


Требования:

  • encoding/csvNewReader, ReadAll
  • пропусти заголовок или используй его
  • выведи таблицу в консоль
  • добавь нового героя через csv.NewWriter и Write

Пример вывода:

Name            Power           Level
Superman полёт 95
Batman интеллект 88
...

Задание 5 — JSON-галерея героев

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

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

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


Требования:

  • структура Hero { Name string, Power string, Level int }
  • json.MarshalIndent с отступом " "
  • os.WriteFile("heroes.json", data, 0644)
  • выведи содержимое файла через os.ReadFile и fmt.Println(string(data))

Пример heroes.json:

[
{
"Name": "Superman",
"Power": "полёт",
"Level": 95
},
...
]

Задание 6 — Поисковик по файлу

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

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

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


Требования:

  • bufio.Scanner + strings.Contains(strings.ToLower(line), strings.ToLower(query))
  • вывод: строка 7: ...сокровище...
  • в конце — количество найденных совпадений

Пример вывода:

Найдено 3 совпадения:
строка 3: Здесь спрятано настоящее сокровище!
строка 7: Сокровище ждёт тебя.
строка 12: Ты нашёл сокровище!

Задание 7 — Итоговое: Логгер + CSV + JSON

Задание 7: Логгер миссий + CSV + JSON (итоговое)

⏱️ Примерное время: 35-50 минут

Создай логгер миссий, который пишет в log.txt и сохраняет статистику в CSV и JSON.


Требования:

  • структура MissionLogger
  • метод Log(event string) — пишет в log.txt с временем
  • после миссии:
    • сохрани события в events.csv (csv.NewWriter)
    • сохрани статистику (кол-во событий, длительность, успех/ошибка) в stats.json
  • выведи содержимое всех файлов

Пример stats.json:

{
"mission": "Apollo 13",
"events_count": 15,
"duration_sec": 42,
"success": true
}
подсказка

Работа с файлами — это 90% реальных приложений.
Всегда проверяй ошибки, закрывай файлы и делай код надёжным!