Метод os.File.Write

Метод Write выполняет запись данных в файл, представленный структурой os.File. На вход метод принимает срез байтов, который требуется записать. Возвращает количество байтов, которое удалось записать, и ошибку, если она возникла. Важно понимать, что метод записывает данные ровно так, как они передаются, без добавления автоматических разделителей или символов перевода строки.

Синтаксис

gofunc (f *File) Write(b []byte) (n int, err error)

Пример

Давайте откроем или создадим файл и запишем в него простую текстовую строку в виде байтового среза:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Create("example.txt")
  if err != nil {
    fmt.Println("Ошибка создания файла:", err)
    return
  }
  defer file.Close()

  data := []byte("Hello, Go!")
  n, err := file.Write(data)
  if err != nil {
    fmt.Println("Ошибка записи:", err)
    return
  }

  fmt.Printf("Записано байт: %d\n", n)
}

Результат выполнения кода:

go"Записано байт: 10"

Пример

Попробуем выполнить последовательную запись нескольких фрагментов данных в один и тот же файл. По умолчанию запись происходит с начала файла, но можно использовать метод Seek для управления позицией:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.Create("data.txt")
  if err != nil {
    fmt.Println("Ошибка:", err)
    return
  }
  defer file.Close()

  first := []byte("Первая строка\n")
  second := []byte("Вторая строка\n")

  file.Write(first)
  file.Write(second)

  fmt.Println("Данные успешно записаны")
}

Результат выполнения кода:

go"Данные успешно записаны"

Пример

Рассмотрим случай, когда происходит попытка записи в файл, открытый только для чтения. Метод вернёт ошибку, которую следует обработать:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile("readonly.txt", os.O_RDONLY, 0644)
  if err != nil {
    fmt.Println("Ошибка открытия:", err)
    return
  }
  defer file.Close()

  data := []byte("попытка записи")
  _, err = file.Write(data)
  if err != nil {
    fmt.Println("Ошибка записи:", err)
  }
}

Результат выполнения кода:

go"Ошибка записи: write readonly.txt: bad file descriptor"

Смотрите также

  • метод os.File.WriteString,
    позволяющий записывать строковые данные непосредственно
  • функцию os.Create,
    создающую файл для записи
  • метод os.File.Read,
    предназначенный для чтения данных из файла
  • метод os.File.Sync,
    принудительно сбрасывающий буферы данных на диск