Функция fs.ReadFile

Функция fs.ReadFile читает содержимое файла и возвращает его в виде байтового среза. В первый параметр функция принимает файловую систему fs.FS, во второй параметр - путь к файлу. Функция возвращает байтовый срез с содержимым файла и ошибку. Если файл не существует или не может быть прочитан, функция возвращает ошибку. Эта функция особенно полезна для работы с встроенными файлами и файловыми системами, реализующими интерфейс fs.ReadFileFS.

Синтаксис

gofs.ReadFile(fsys, name)

Пример

Давайте прочитаем содержимое файла "data.txt" с помощью встроенной файловой системы:

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  content, err := fs.ReadFile(os.DirFS("."), "data.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(string(content))
}

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

go"Hello, World!"

Пример

Давайте обработаем ошибку при попытке чтения несуществующего файла:

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  content, err := fs.ReadFile(os.DirFS("."), "nonexistent.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(string(content))
}

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

go"Error: open nonexistent.txt: file does not exist"

Пример

Давайте прочитаем файл и проверим его содержимое:

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  content, err := fs.ReadFile(os.DirFS("."), "config.json")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  if len(content) > 0 {
    fmt.Println("File size:", len(content), "bytes")
    fmt.Println("First 50 chars:", string(content[:min(50, len(content))]))
  }
}

func min(a, b int) int {
  if a < b {
    return a
  }
  return b
}

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

go"File size: 256 bytes"
"First 50 chars: {\"name\":\"test\",\"value\":123,\"enabled\":true}"

Пример

Давайте прочитаем файл из встроенной файловой системы с использованием вложенных директорий:

gopackage main

import (
  "embed"
  "fmt"
  "io/fs"
)

//go:embed configs/*.json
var configFS embed.FS

func main() {
  content, err := fs.ReadFile(configFS, "configs/app.json")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println(string(content))
}

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

go"{\"version\":\"1.0.0\",\"debug\":true}"

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

  • функцию os.ReadFile,
    которая читает файл напрямую из файловой системы ОС
  • функцию os.WriteFile,
    которая записывает данные в файл
  • функцию fs.ReadDir,
    которая читает содержимое директории
  • функцию io.ReadAll,
    которая читает все данные из ридера