В некоторых случаях может потребоваться прочитать или записать что-то в определенное место в файле. К примеру, это может быть очень большой файл, но мы знаем где именно нужно выполнить изменение в нем, для этого не нужно читать его всего. Данная инструкция показывает, как использовать поиск позиции в контексте операций над обычным текстовом файле файла.

1. Создайте файл flatfile.txt со следующим содержимым:

Форум Гоферов

Мы работаем над форумом для программистов на Golang. Очень нужны модераторы которые хотят помочь с ответами для новичков и помочь в развитии Go-сообщества.

Go на Форум

Уроки, статьи и Видео

Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.

Go в ВК Go в Telegram

2. Создайте файл fileseek.go со следующим содержимым:

3. Запустите код через go run fileseek.go;
4. Посмотрите на вывод:

файлы golang

5. Отображение файла в xxd flatfile.txt:

файлы go

Как написать код для программы, что находит позицию в файле?

В предыдущем примере используется файл flatfile.txt, над которым выполняется поиск в нем, прочтение и запись в определенную позицию в файле. В общем и целом для перемещения позиции текущего указателя в File может использоваться метод Seek. Он принимает два аргумента, это позиция и то, как считать позицию, 0 — относительно оригиналу файла, 1 — относительно текущей позиции, 2 — относительно конца строки. В таком случае вы можете переместить курсор внутри файла. Метод Seek используется для имплементации функции readLine в коде выше.

os.File также содержит методы ReadAt и WriteAt. При использовании методов, байты должны быть записаны/прочитаны, также должна даваться отправная точка. Это упрощает запись и чтение для определенной позиции в файле.

На заметку: Обратите внимание, что в примере предполагается, что каждая руна составляет один байт, что не обязательно должно быть так для специальных символов и так далее.

Понравилась статья?

Поддержи наш проект, чтобы мы могли создать больше хорошего контента!