Интерфейс fs.ReadFileFS
Интерфейс fs.ReadFileFS предназначен для чтения содержимого
файла из файловой системы. Он содержит единственный метод
ReadFile, который принимает имя файла в качестве аргумента
и возвращает содержимое файла в виде среза байтов или ошибку.
Этот интерфейс является частью пакета io/fs и позволяет
работать с файловыми системами, поддерживающими операцию чтения
файла целиком.
Синтаксис
type ReadFileFS interface {
FS
ReadFile(name string) ([]byte, error)
}
Метод ReadFile принимает строку name - имя файла
(путь относительно корня файловой системы) и возвращает срез байт
с содержимым файла и ошибку. Если файл не существует или
произошла другая ошибка, метод вернет nil и ошибку.
Пример
Давайте прочитаем содержимое файла "example.txt" с помощью
интерфейса fs.ReadFileFS. Для этого создадим тестовую
файловую систему с этим файлом:
package main
import (
"fmt"
"io/fs"
"testing/fstest"
)
func main() {
// Создаем тестовую файловую систему с файлом "example.txt"
testFS := fstest.MapFS{
"example.txt": &fstest.MapFile{
Data: []byte("Hello, World!"),
},
}
// Проверяем, что файловая система реализует интерфейс fs.ReadFileFS
if readFileFS, ok := testFS.(fs.ReadFileFS); ok {
// Читаем содержимое файла
data, err := readFileFS.ReadFile("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(data))
} else {
fmt.Println("fs does not implement fs.ReadFileFS")
}
}
Результат выполнения кода:
"Hello, World!"
Пример
Если файл не существует, метод ReadFile вернет ошибку.
Давайте попробуем прочитать несуществующий файл:
package main
import (
"fmt"
"io/fs"
"testing/fstest"
)
func main() {
// Создаем пустую тестовую файловую систему
testFS := fstest.MapFS{}
// Проверяем, что файловая система реализует интерфейс fs.ReadFileFS
if readFileFS, ok := testFS.(fs.ReadFileFS); ok {
// Пытаемся прочитать несуществующий файл
data, err := readFileFS.ReadFile("missing.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(data))
} else {
fmt.Println("fs does not implement fs.ReadFileFS")
}
}
Результат выполнения кода:
"Error: open missing.txt: file does not exist"
Пример
Интерфейс fs.ReadFileFS удобно использовать для работы
с встраиваемыми файловыми системами. Например, с пакетом embed:
package main
import (
"embed"
"fmt"
"io/fs"
)
//go:embed example.txt
var embeddedFS embed.FS
func main() {
// Проверяем, что встраиваемая файловая система реализует интерфейс fs.ReadFileFS
if readFileFS, ok := embeddedFS.(fs.ReadFileFS); ok {
// Читаем содержимое файла
data, err := readFileFS.ReadFile("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(data))
} else {
fmt.Println("fs does not implement fs.ReadFileFS")
}
}
Результат выполнения кода (при наличии файла "example.txt" в директории):
"Hello, World!"
Смотрите также
-
интерфейс
fs.FS,
который является базовым интерфейсом для всех файловых систем -
функцию
fs.ReadFile,
которая упрощает чтение файла из любой файловой системы -
интерфейс
fs.ReadDirFS,
который предоставляет метод для чтения содержимого директории -
функцию
os.ReadFile,
которая читает содержимое файла из операционной системы