Запис файлів|Writing Files
#
// Створення/Запис файлів у Go - слідує вже знайомим нам
// шаблонам розглянутим в [Читання файлів](reading-files).
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
var err error
// Почнемо з запису невеличкого зрізу байтів до файлу.
d1 := []byte("привіт\ngo\n")
err = os.WriteFile("/tmp/dat1", d1, 0o644)
if err != nil {
panic(err)
}
// Щоб записати до файлу деякі данні, нам необхідно його спочатку відкрити.
f, err := os.Create("/tmp/dat2")
if err != nil {
panic(err)
}
// Зверніть увагу, на ідіоматично вірний відкладений виклик `Close`,
// що ми ініціюємо відразу після відкриття.
defer f.Close()
// Запишемо, за допомогою методу `Write` ще один зріз байтів.
d2 := []byte{115, 111, 109, 101, 10}
n2, err := f.Write(d2)
if err != nil {
panic(err)
}
fmt.Printf("Записано %d байт\n", n2)
// `WriteString` дозволить записати рядок.
n3, err := f.WriteString("writes\n")
if err != nil {
panic(err)
}
fmt.Printf("Записано %d байт\n", n3)
// Виконання`Sync` - надішле буфер до файлу.
f.Sync()
// Пакет `bufio` надає можливість буферизованих
// записів, надодачу до буферизованого читання
// (яке вже було нами розглянуто).
w := bufio.NewWriter(f)
n4, err := w.WriteString("buffered\n")
if err != nil {
panic(err)
}
fmt.Printf("Записано %d байт\n", n4)
// Щоб впевнитись у тому, що усі буфери в які ми записували
// наші данні було відправлено до джерела запису,
// виконайте метод `Flush`.
w.Flush()
}
# Try running the file-writing code.
$ go run writing-files.go
Записано 5 байт
Записано 7 байт
Записано 9 байт
# Перевірте зміст записаних файлів.
$ cat /tmp/dat1
привіт
go
$ cat /tmp/dat2
some
writes
buffered
# Далі, ми розглянемо як застосовувати потоки
# вводу/виводу, на прикладі - створення програми
# "рядкового фільтра".