cpp

Структура Writer: запись в файл

Пакет bufio реализует буферизованный ввод/вывод, обертывая объект io.Writer в объект bufio.Writer, а объект io.Reader в объект bufio.Reader. При использовании пакета не забудьте добавить следующую инструкцию в начало программы:

import "bufio"

Структура bufio.Writer содержит методы для записи в файл. При этом записанные данные сначала попадают в буфер, а при вызове метода Flush() данные записываются в файл. Создать объект структуры bufio.Writer позволяют следующие функции из пакета bufio:

  • NewWriter() — формат функции:
bufio.NewWriter(w io.Writer) *bufio.Writer

Пример записи строки в буфер и сброса буфера в поток os.Stdout:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.Size()) // 4096
writer.WriteString("Строка\n")
writer.Flush()
  • NewWriterSize() — позволяет дополнительно указать размер буфера. Формат функции:
bufio.NewWriterSize(w io.Writer, size int) *bufio.Writer

Пример записи строки в буфер и сброса буфера в файл:

func test() {
   file, err := os.Create(`C:\book\test.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   writer := bufio.NewWriterSize(file, 65536)
   fmt.Println(writer.Size()) // 65536
   if _, err = writer.WriteString("Строка"); err != nil {
      fmt.Println(err)
      return
   }
   if err = writer.Flush(); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}

Структура bufio.Writer содержит следующие методы:

  • Flush() — сбрасывает содержимое буфера в поток и возвращает объект ошибки или значение nil, если операция выполнена успешно. Формат метода:
(*bufio.Writer).Flush() error
  • WriteString() — записывает строку в буфер. Формат метода:
(*bufio.Writer).WriteString(s string) (int, error)

Метод возвращает два значения. Через первое значение доступно число записанных байтов. Через второе значение доступен объект ошибки или nil, если операция выполнена успешно. Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.WriteString("Строка")) // 12 <nil>
writer.Flush()
  • Write() — записывает все содержимое байтового слайса в буфер. Формат метода:
(*bufio.Writer).Write(p []byte) (nn int, err error)

Метод возвращает два значения. Через первое значение доступно число записанных байтов. Через второе значение доступен объект ошибки или nil, если операция выполнена успешно. Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.Write([]byte("Строка"))) // 12 <nil>
writer.Flush()
  • WriteByte() — добавляет байт c в буфер. Формат метода:
(*bufio.Writer).WriteByte(c byte) error

Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.WriteByte('t')) // <nil>
writer.Flush()
  • WriteRune() — добавляет содержимое символа r в буфер. Через переменную size доступно число добавленных байтов. Формат метода:
(*bufio.Writer).WriteRune(r rune) (size int, err error)

Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.WriteRune('б')) // 2 <nil>
writer.Flush()
  • ReadFrom() — считывает все содержимое объекта r и записывает его в поток. Формат метода:
(*bufio.Writer).ReadFrom(r io.Reader) (n int64, err error)

Метод возвращает два значения. Через первое значение доступно число считанных и записанных байтов. Через второе значение доступен объект ошибки или nil, если операция выполнена успешно. Пример:

writer := bufio.NewWriter(os.Stdout)
writer.WriteString("Строка1\n")
buf := bytes.NewBufferString("Строка2")
fmt.Println(writer.ReadFrom(buf)) // 13 <nil>
writer.Flush()
  • Size() — возвращает размер буфера в байтах. Формат метода:
(*bufio.Writer).Size() int

Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.Size()) // 4096
  • Available() — возвращает размер свободной части буфера в байтах. Формат метода:
(*bufio.Writer).Available() int

Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.Available()) // 4096
writer.WriteString("Строка\n")
fmt.Println(writer.Available()) // 4083
writer.Flush()
  • Buffered() — возвращает размер занятой части буфера в байтах. Формат метода:
(*bufio.Writer).Buffered() int

Пример:

writer := bufio.NewWriter(os.Stdout)
fmt.Println(writer.Buffered()) // 0
writer.WriteString("Строка\n")
fmt.Println(writer.Buffered()) // 13
writer.Flush()
  • Reset() — удаляет содержимое буфера и заменяет поток вывода на w. Формат метода:
(*bufio.Writer).Reset(w io.Writer)

Пример:

writer := bufio.NewWriter(os.Stdout)
writer.WriteString("Строка1\n")
writer.Reset(os.Stderr)
writer.WriteString("Строка2\n")
writer.Flush()

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Реквизиты

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp