cpp

Запись в файл

Для записи в файл предназначены следующие методы структуры File:

  • WriteString() — записывает строку в файл. Формат метода:
(*os.File).WriteString(s string) (n int, err error)

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

func test() {
   file, err := os.Create(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   if _, err = file.WriteString("Строка1"); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}
  • Write() — записывает все содержимое байтового слайса в файл. Формат метода:
(*os.File).Write(b []byte) (n int, err error)

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

func test() {
   file, err := os.Create(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   if _, err = file.Write([]byte("Строка2")); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}
  • WriteAt() — записывает все содержимое байтового слайса в файл, начиная с позиции off. Формат метода:
(*os.File).WriteAt(b []byte, off int64) (n int, err error)

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

func test() {
   mode := os.O_WRONLY | os.O_CREATE
   file, err := os.OpenFile(`C:\book\file.txt`, mode, 0o777)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   if _, err = file.WriteAt([]byte("Строка3"), 8); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}
  • ReadFrom() — считывает все содержимое объекта r и записывает его в файл. Формат метода:
(*os.File).ReadFrom(r io.Reader) (n int64, err error)

Интерфейс io.Reader содержит объявление одного метода:

type Reader interface {
   Read(p []byte) (n int, err error)
}

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

func test() {
   file, err := os.Create(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   buf := bytes.NewBufferString("Строка1\nСтрока2")
   if _, err := file.ReadFrom(buf); err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}

Структура File реализует интерфейс io.Writer:

type Writer interface {
   Write(p []byte) (n int, err error)
}

Благодаря этому для записи в файл мы можем использовать функции из пакета fmt:

  • Fprintln() — записывает данные в поток, реализующий интерфейс io.Writer. Между данными вставляется пробел, а в конец вставляется символ перевода строки. Формат функции:
fmt.Fprintln(w io.Writer, a ...interface{}) (n int, err error)

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

func test() {
   file, err := os.Create(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   _, err = fmt.Fprintln(file, true, 10, 14.5, "строка")
   // true 10 14.5 строка\n
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}
  • Fprint() — записывает данные в поток, реализующий интерфейс io.Writer. В отличие от функции Fprintln() функция Fprint() не всегда добавляет пробел между данными. Если с одной из сторон находится строка, то пробел не добавляется. Символ перевода строки в конец не добавляется. Формат функции:
fmt.Fprint(w io.Writer, a ...interface{}) (n int, err error)

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

func test() {
   file, err := os.Create(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   _, err = fmt.Fprint(file, true, 10, 14.5, "строка")
   // true 10 14.5строка
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}
  • Fprintf() — записывает данные в поток, реализующий интерфейс io.Writer, в соответствии со строкой формата. Внутри строки формата можно указать обычные символы и спецификаторы формата, начинающиеся с символа % (см. описание функции Printf() в разд. 1.9). Количество спецификаторов должно совпадать с количеством переданных параметров. Формат функции:
fmt.Fprintf(w io.Writer, format string,
            a ...interface{}) (n int, err error)

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

func test() {
   file, err := os.Create(`C:\book\file.txt`)
   if err != nil {
      fmt.Println(err)
      return
   }
   defer file.Close()
   _, err = fmt.Fprintf(file, "%v %d %s", true, 10, "строка")
   // true 10 строка
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}

Для записи в файл можно также воспользоваться функцией WriteFile() из пакета os. Формат функции:

os.WriteFile(name string, data []byte, perm fs.FileMode) error

В первом параметре указывается абсолютный или относительный путь к файлу, а во втором — байтовый слайс, содержимое которого будет записано в файл. Если файл не существует, то он будет создан с правами perm. Если файл существует, то он будет перезаписан. Функция возвращает объект ошибки или nil, если операция выполнена успешно. Пример:

func test() {
   b := []byte("Строка1\nСтрока2")
   err := os.WriteFile(`C:\book\file.txt`, b, 0o777)
   if err != nil {
      fmt.Println(err)
      return
   }
   fmt.Println("Операция выполнена успешно")
}

Для записи строки в файл можно использовать функцию WriteString() из пакета io. Формат функции:

io.WriteString(w io.Writer, s string) (n int, err error)

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

n, err := io.WriteString(os.Stdout, "Строка\n")
if err != nil {
   fmt.Println(err)
   return
}
fmt.Println("n =", n) // 13

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

Реквизиты

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

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

cpp