Като език за програмиране Go има широк набор от вградени функции, включително възможността за създаване, четене и писане на файлове като текстови (.txt) файлове.

Файловете са важни компоненти на нашето ежедневие в съвременния свят. Текстовите файлове са полезни за съхраняване на структурирани четими от човека данни без използването на външен софтуер или бази данни.

Ако се чудите как бихте могли да започнете да манипулирате текстови файлове в Go, тази статия е правилното място за вас.

Пакетът bufio в Go

The буфио пакетът, който е част от стандартната библиотека на Go, се използва за буферирани входни и изходни операции, откъдето идва и името. The буфио пакетът се основава на io. Читател и io. Писател интерфейси, които се използват широко при внедряването на повечето стандартни пакети на Go.

The буфио пакетът отива една крачка напред чрез прилагане на буфериране, което го прави полезен за IO операции, включващи текстови данни.

За да използвате буфио пакет във вашата програма, трябва да го импортирате заедно с други пакети.

instagram viewer
импортиране (
"fmt"
"буфио"
)

Вероятно сте чули, когато сте започна с Go че идва с всичко, от което може да се нуждаете като програмист. За директна комуникация с вашата операционна система има пакет, наречен операционна система който осигурява независими от платформата функции.

The операционна система и буфио пакетите правят манипулирането на текстови файлове невероятно лесно.

Въпреки че по-голямата част от операционна система функциите на пакета са подобни на Unix, всички те използват стила Go за обработка на грешки, което улеснява четенето на съобщения за грешка и кода за отстраняване на грешки.

И така, как се манипулират файлове, съдържащи текст в Go?

Как да четем данни от текстов файл

За да прочетете данни от текстови файлове, трябва да се обадите на операционна система пакет отворено() функция, която приема името на файла за четене като параметър. Друг метод за получаване на файла е чрез използване на Отворете файла() функция.

Основната разлика между отворено() и Отворете файла() е в изпълнението им. отворено() отваря файл в режим само за четене (с O_RDONLY флаг), докато Отворете файла() дава повече гъвкавост чрез приемане на три параметъра, а именно:

  • Име на файл
  • Режим на отваряне на файл: Валидните режими на отваряне на файл са показани в таблицата по-долу.
    Флаг Значение
    O_RDONLY Отваря файла в режим само за четене
    O_ГРЕШНО Отваря файла в режим само за запис
    O_RDWR Отваря файла в режим на четене и запис
    O_APPEND Добавя данни към файла при запис
    O_CREATE Създава нов файл, ако не съществува такъв
    O_EXCL Използва се с O_CREATE, за да посочи, че файлът трябва да бъде създаден само ако не съществува
    O_SYNC Отваря файл за синхронен I/O
    O_TRUNC Съкратете файла при отваряне, ако е възможно
  • Разрешения за файлове: Същите като битове за разрешение за файл в Linux използва се за определяне на правила за достъп до файлове, например 0777 за предоставяне на разрешения за четене, писане и изпълнение на всички типове потребители.

Кодът по-долу показва как да четете данни от текстов файл в Go с помощта на операционна система. отворено(), и сканиране() който в този случай работи в a Отидете за цикъл.

пакет основен
импортиране (
"буфио"
"fmt"
"дневник"
"операционна система"
)
/**
СЪДЪРЖАНИЕ НА "testfile.txt" файл.
lorem ipsum dolor sit amet
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet
Lorem Ipsum Dolor Sit Amet
lOREM iPSUM DOLOR SIT AMET
LoReM IpSuM DOLOR SIT AmEt
*/
функ основен(){
файл, грешка := os. отворено("testfile.txt")
// друг метод, използващ os. Отворете файла()
// файл, грешка = os. Отворете файла("testfile.txt", операционна система. O_RDONLY, 0644)
if err != nil {
дневник.Фатално(грешка)
}
отлагамфайл.Близо()
fmt. Println("Файлът е отворен успешно. Сега четем съдържанието на файла ред по ред:")
// създавам скенер от на файлда сеПрочетитекстот
скенер := bufio. NewScanner (файл)
// сканира или чете байтовете текст ред по ред
заскенер.Сканиране() {
fmt.Println(скенер.Текст())
}
if err := скенер. Err(); грешка != нула {
дневник.Фатално(грешка)
}
}

Когато стартирате горния код с стартирайте filename.go, той произвежда резултата, показан по-долу:

Ако подадете само името на файла, а не пътя към отворено() или Отворете файла() функция за операции за четене, Go приема, че файлът е в настоящата директория и връща грешка, ако не го намери. Трябва да подадете пътя към файла, ако трябва да работите с файлове извън текущата директория.

Как да запишете данни в текстов файл

The буфио пакетът осигурява буфериран Писател интерфейс, който съхранява байтове данни и ги записва във файл с помощта на a Промиване () функция.

Следващият примерен код е продължение на този за четене на файл. В този пример данните се записват в съществуващото testfile.txt използвайки O_ГРЕШНО и O_APPEND знамена.

Добавете следните редове код към програмата по-горе, преди затварящата фигурна скоба на основен () функция:

// запис на изходни данни във файл
файл, грешка = os. OpenFile("testfile.txt", os. O_APPEND|os. ГРЕШНО, 0644)
ако грешка!= нула {
дневник. Фатално (грешка)
}
отлагам файл. Близо()
fmt. Println("Файлът е отворен успешно, сега се подготвя за запис на данни във файл...")
// създаване на буфериран Writer обект за запис на данни във файл
textWriter := bufio. NewWriter (файл)
// запишете низ в буфера преди да запазите файла.
_, грешка = textWriter. WriteString("-Това е a нов текст, добавен към файла.")
ако грешка!= нула {
дневник. Фатално (грешка)
}
textWriter. Промиване ()
fmt. Println("Данните, записани във файл успешно...")

Резултатът от вашата пълна програма трябва да изглежда така:

Когато отворите testfile.txt файл, вие също ще видите новия ред, добавен в края на файла точно като изображението по-долу:

Работата с файлове в Go е лесна

Go ви позволява да работите с различни файлове, не само с текстови файлове. Има множество допълнителни вградени библиотеки и функции за работа с различни типове данни от файлове, включително JSON и CSV.

За да видите как се държат по различен начин в зависимост от ситуацията, можете да експериментирате с различните флагове и разрешения за файлове, които са налични за използване с Отворете файла().