Интерфейс fs.File
Интерфейс fs.File представляет собой файл в виртуальной файловой системе. Он определяет методы для чтения данных, закрытия файла и получения информации о файле. В первый параметр методы принимают срез байтов для чтения данных, во второй параметр могут принимать смещение для позиционирования. Интерфейс fs.File используется в функциях пакета fs для работы с файлами через абстракцию файловой системы.
Интерфейс fs.File включает методы Read, Close, Stat и другие. Метод Read читает данные из файла в предоставленный срез байтов и возвращает количество прочитанных байтов и ошибку. Метод Close закрывает файл и освобождает связанные с ним ресурсы. Метод Stat возвращает информацию о файле, такую как размер и время изменения.
Синтаксис
type File interface {
Read([]byte) (int, error)
Close() error
Stat() (FileInfo, error)
}
Пример
Давайте откроем файл с помощью функции fs.ReadFile и прочитаем его содержимое:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
data, err := fs.ReadFile(os.DirFS("."), "example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(data))
}
Результат выполнения кода:
"Hello, World!"
Пример
Давайте используем метод Read для чтения данных из файла в буфер:
package main
import (
"fmt"
"io/fs"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
buf := make([]byte, 100)
n, err := file.Read(buf)
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println(string(buf[:n]))
}
Результат выполнения кода:
"Hello, World!"
Пример
Давайте получим информацию о файле с помощью метода Stat:
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
info, err := file.Stat()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("File size:", info.Size())
fmt.Println("Is directory:", info.IsDir())
fmt.Println("Permission:", info.Mode())
}
Результат выполнения кода:
"File size: 13"
"Is directory: false"
"Permission: -rw-r--r--"
Пример
Давайте используем интерфейс fs.File с виртуальной файловой системой для чтения встроенных файлов:
package main
import (
"embed"
"fmt"
"io/fs"
)
//go:embed example.txt
var embeddedFiles embed.FS
func main() {
file, err := embeddedFiles.Open("example.txt")
if err != nil {
fmt.Println("Error:", err)
return
}
defer file.Close()
stat, err := file.Stat()
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("File name:", stat.Name())
fmt.Println("File size:", stat.Size())
}
Результат выполнения кода:
"File name: example.txt"
"File size: 13"
Смотрите также
-
интерфейс
fs.FS,
который представляет виртуальную файловую систему -
функцию
os.Open,
которая открывает файл по указанному пути -
функцию
fs.ReadFile,
которая читает все содержимое файла -
интерфейс
os.FileInfo,
который содержит информацию о файле