Као програмски језик, Го има широк спектар уграђених функција, укључујући могућност креирања, читања и писања датотека попут текстуалних (.ткт) датотека.

Датотеке су важне компоненте нашег свакодневног живота у савременом свету. Текстуалне датотеке су корисне за складиштење структурираних података читљивих људи без употребе спољног софтвера или база података.

Ако се питате како бисте могли да почнете да манипулишете текстуалним датотекама у Го, овај чланак је право место за вас.

Буфио пакет у Го

Тхе буфио пакет, који је део Го-ове стандардне библиотеке, користи се за бафероване улазне и излазне операције, отуда и назив. Тхе буфио пакет се заснива на ио. Реадер и ио. Вритер интерфејсе, који се у великој мери користе у имплементацији већине Го-ових стандардних пакета.

Тхе буфио пакет иде корак даље имплементацијом баферовања, што га чини корисним за ИО операције које укључују текстуалне податке.

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

увоз (
"фмт"
"буфио"
)

Вероватно сте чули када сте почео са Го да долази са свиме што би вам могло затребати као програмеру. За директну комуникацију са вашим оперативним системом постоји пакет тзв ос који обезбеђује функције независне од платформе.

Тхе ос и буфио пакети чине манипулацију текстуалним датотекама невероватно једноставном.

Иако је велика већина од ос функције пакета су сличне Уник-у, све користе Го стил руковања грешкама, што олакшава читање порука о грешци и кода за отклањање грешака.

Дакле, како да манипулишете датотекама које садрже текст у Го?

Како читати податке из текстуалне датотеке

Да бисте прочитали податке из текстуалних датотека, потребно је да позовете ос пакета Опен() функција, која прихвата име датотеке која се чита као параметар. Други начин да добијете датотеку је коришћење Отворен филе() функција.

Главна разлика између Опен() и Отворен филе() је у њиховој имплементацији. Опен() отвара датотеку у режиму само за читање (са О_РДОНЛИ застава), док Отворен филе() даје већу флексибилност прихватањем три параметра и то:

  • Назив документа
  • Режим отварања датотеке: Важећи начини отварања датотека приказани су у табели испод.
    Застава Значење
    О_РДОНЛИ Отвара датотеку у режиму само за читање
    О_ВРОНЛИ Отвара датотеку у режиму само за писање
    О_РДВР Отвара датотеку у режиму читања и писања
    О_АППЕНД Додаје податке у датотеку приликом писања
    О_ЦРЕАТЕ Креира нову датотеку ако не постоји
    О_ЕКСЦЛ Користи се са О_ЦРЕАТЕ, да би се назначило да датотеку треба креирати само ако не постоји
    О_СИНЦ Отвара датотеку за синхрони И/О
    О_ТРУНЦ Скратите датотеку при отварању, ако је могуће
  • Дозволе за датотеку: Исто као битови дозволе датотеке у Линуку користи се за одређивање правила приступа датотекама, нпр. 0777 за доделу дозвола за читање, писање и извршавање свим типовима корисника.

Код у наставку показује како читати податке из текстуалне датотеке у Го користећи ос. Опен(), и Скенирај() који у овом случају, ради у а Иди на петљу.

пакет главни
увоз (
"буфио"
"фмт"
"Пријава"
"ос"
)
/**
САДРЖАЈ ТХЕ "тестфиле.ткт" фајл.
Лорем ипсум долор сит амет
ЛОРЕМ ИПСУМ ДОЛОР СИТ АМЕТ
Лорем ипсум долор сит амет
Лорем ипсум долор сит амет
Лорем ипсум долор сит амет
Лорем ипсум долор сит амет
*/
фунц главни(){
фајл, грешка := ос. Отвори("тестфиле.ткт")
// други метод који користи ос. Отворен филе()
// датотека, грешка = ос. Отворен филе("тестфиле.ткт", ос. О_РДОНЛИ, 0644)
ако грешка != нил {
Пријава.Фатал(ерр)
}
одложитифајл.Близу()
фмт. Принтлн("Датотека је успешно отворена. Сада читате садржај датотеке ред по ред:")
// Креирај скенер из тхе фајлдочитатитекстиз
скенер := буфио. НевСцаннер (фајл)
// скенирање или читање бајтова текста ред по ред
заскенер.Скенирај() {
фмт.Принтлн(скенер.Тект())
}
ако грешка := скенер. Ерр(); грешка != нил {
Пријава.Фатал(ерр)
}
}

Када покренете горњи код са иди покрени име датотеке.го, производи излаз приказан испод:

Ако унесете само име датотеке, а не путању до Опен() или Отворен филе() функцију за операције читања, Го претпоставља да се датотека налази у тренутном директоријуму и враћа грешку ако је не пронађе. Требало би да проследите путању до датотеке ако треба да радите са датотекама изван тренутног директоријума.

Како написати податке у текстуалну датотеку

Тхе буфио пакет обезбеђује баферован Вритер интерфејс који чува бајтове података и уписује их у датотеку уз помоћ а Флусх() функција.

Следећи пример кода је наставак оног за читање датотеке. У овом примеру, подаци се уписују у постојећи тестфиле.ткт помоћу О_ВРОНЛИ и О_АППЕНД заставе.

Додајте следеће линије кода у програм изнад, пре завршне витичасте заграде главни() функција:

// запис излазних података у датотеку
фајл, грешка = ос. ОпенФиле("тестфиле.ткт", ос. О_АППЕНД|ос. О_ПОГРЕШНО, 0644)
ако ерр != нула {
Пријава. Фатално (грешка)
}
одложити фајл. Близу()
фмт. Принтлн("Датотека је успешно отворена, сада се припрема за уписивање података у датотеку...")
// креирање баферованог Вритер објекта за писање података у датотеку
тектВритер := буфио. НевВритер (фајл)
// уписује стринг у бафер пре чувања датотеке.
_, ерр = тектВритер. ВритеСтринг("-Ово је а Нова текст додат у датотеку.")
ако ерр != нула {
Пријава. Фатално (грешка)
}
тектВритер. Флусх()
фмт. Принтлн("Подаци су успешно уписани у датотеку...")

Излаз вашег комплетног програма би требао изгледати овако:

Када отворите тестфиле.ткт датотеку, такође ћете видети нову линију додату на крају датотеке баш као на слици испод:

Руковање датотекама у Го је лако

Го вам омогућава да радите са разним датотекама, а не само са текстуалним датотекама. Постоје бројне додатне уграђене библиотеке и функције за рад са различитим типовима података из датотека, укључујући ЈСОН и ЦСВ.

Да бисте видели како се понашају различито у зависности од ситуације, можете експериментисати са различитим ознакама и дозволама за датотеке које су доступне за коришћење са Отворен филе().