Как язык программирования, Go имеет широкий спектр встроенных функций, включая возможность создавать, читать и записывать файлы, такие как текстовые (.txt) файлы.
Файлы являются важными компонентами нашей повседневной жизни в современном мире. Текстовые файлы полезны для хранения структурированных удобочитаемых данных без использования внешнего программного обеспечения или баз данных.
Если вам интересно, как вы могли бы начать манипулировать текстовыми файлами в Go, эта статья — то, что вам нужно.
Пакет bufio в Go
буфий package, являющийся частью стандартной библиотеки Go, используется для операций буферизованного ввода и вывода, отсюда и название. буфий пакет основан на ио. Читатель и ио. Писатель интерфейсы, которые широко используются в реализации большинства стандартных пакетов Go.
буфий package делает еще один шаг вперед, реализуя буферизацию, что делает его полезным для операций ввода-вывода с текстовыми данными.
Чтобы использовать буфий package в вашей программе, вы должны импортировать его вместе с другими пакетами.
Импортировать (
"ФМТ"
"буфий"
)
Вы, наверное, слышали, когда вы начал с Go что он поставляется со всем, что вам может понадобиться как программисту. Для прямой связи с вашей операционной системой существует пакет под названием Операционные системы который предоставляет независимые от платформы функции.
Операционные системы и буфий пакеты делают работу с текстовыми файлами невероятно простой.
Хотя подавляющее большинство Операционные системы Функции пакета похожи на Unix, все они используют стиль Go для обработки ошибок, что упрощает чтение сообщений об ошибках и отладку кода.
Итак, как вы манипулируете файлами, содержащими текст в Go?
Как читать данные из текстового файла
Для чтения данных из текстовых файлов необходимо вызвать метод Операционные системы пакет Открыть() функция, которая принимает имя файла для чтения в качестве параметра. Другой способ получить файл — использовать Открыть файл() функция.
Основное различие между Открыть() и Открыть файл() находится в их реализации. Открыть() открывает файл в режиме только для чтения (с O_RDONLY флаг), а Открыть файл() дает больше гибкости, принимая три параметра, а именно:
- Имя файла
- Режим открытия файла: Допустимые режимы открытия файла показаны в таблице ниже.
Флаг Значение O_RDONLY Открывает файл в режиме только для чтения O_WRONLY Открывает файл в режиме только для записи O_RDWR Открывает файл в режиме чтения-записи. O_APPEND Добавляет данные в файл при записи O_CREATE Создает новый файл, если его не существует O_EXCL Используется с O_CREATE, чтобы указать, что файл должен быть создан только в том случае, если он не существует. O_SYNC Открывает файл для синхронного ввода/вывода O_TRUNC Обрезать файл при открытии, если это возможно - Права доступа к файлам: такие же, как биты прав доступа к файлам в Linux используется для указания правил доступа к файлам, например, 0777 для предоставления прав на чтение, запись и выполнение всем типам пользователей.
В приведенном ниже коде показано, как читать данные из текстового файла в Go, используя Операционные системы. Открыть(), и Сканировать() который в данном случае работает в Перейти на петлю.
упаковка основной
Импортировать (
"буфий"
"ФМТ"
"бревно"
"Операционные системы"
)
/**
СОДЕРЖАНИЕ "тестовый файл.txt" файл.
lorem ipsum dolor sit amet
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet
Лорем Ипсум Долор Сит Амет
ЛОРЕМ ИПСУМ ДОЛОР СИТ АМЕТ
ЛОРЕМ ИПСУМ ДОЛОР СИТ АМЕТ
*/
функция основной(){
файл, ошибка := os. Открыть("тестовый файл.txt")
// другой метод, использующий os. Открыть файл()
// файл, ошибка = os. Открыть файл("тестовый файл.txt", Операционные системы. ОРДОНЛИ, 0644)
если ошибка != ноль {
бревно.фатальный(ошибаться)
}
откладыватьфайл.Закрывать()
ФМТ. Распечатать("Файл успешно открыт. Теперь читаем содержимое файла построчно:")
// создавать сканер от в файлкчитатьтекстот
сканер := буфио. NewScanner (файл)
// сканируем или читаем байты текста построчно
длясканер.Сканировать() {
ФМТ.Println(сканер.Текст())
}
если ошибка := сканер. Ошибиться(); ошибка != ноль {
бревно.фатальный(ошибаться)
}
}
Когда вы запускаете код выше с беги, имя_файла.go, он производит вывод, показанный ниже:
Если вы передаете только имя файла, а не путь к Открыть() или Открыть файл() для операций чтения, Go предполагает, что файл находится в текущем каталоге, и возвращает ошибку, если не находит его. Вы должны передать путь к файлу, если вам нужно работать с файлами вне текущего каталога.
Как записать данные в текстовый файл
буфий пакет предоставляет буферизованный Писатель интерфейс, который хранит байты данных и записывает их в файл с помощью Румянец() функция.
Следующий пример кода является продолжением кода для чтения файла. В этом примере данные записываются в существующую тестовый файл.txt используя O_WRONLY и O_APPEND флаги.
Добавьте следующие строки кода в приведенную выше программу перед закрывающей фигурной скобкой основной() функция:
// записываем выходные данные в файл
файл, ошибка = ос. OpenFile("testfile.txt", os. O_APPEND|ос. О_НЕПРАВИЛЬНО, 0644)
если ошибся != ноль {
бревно. Фатальный (ошибка)
}
откладывать файл. Закрывать()
ФМТ. Println("Файл успешно открыт, сейчас готовится запись данных в файл...")
// создаем буферизованный объект Writer для записи данных в файл
textWriter := bufio. NewWriter (файл)
// записываем строку в буфер перед сохранением файла.
_, ошибка = TextWriter. WriteString("-Это новый текст, добавленный в файл.")
если ошибся != ноль {
бревно. Фатальный (ошибка)
}
textWriter. Румянец()
ФМТ. Println("Данные успешно записаны в файл...")
Вывод вашей полной программы должен выглядеть так:
Когда вы открываете тестовый файл.txt файл, вы также увидите новую строку, добавленную в конец файла, как показано на рисунке ниже:
Работа с файлами в Go проста
Go позволяет работать с различными файлами, а не только с текстовыми файлами. Имеется множество дополнительных встроенных библиотек и функций для работы с разными типами данных из файлов, включая JSON и CSV.
Чтобы увидеть, как они ведут себя по-разному в зависимости от ситуации, вы можете поэкспериментировать с различными флагами и правами доступа к файлам, доступными для использования с Открыть файл().