Интерфейс fs.StatFS
Интерфейс fs.StatFS представляет собой файловую систему,
которая поддерживает операцию получения информации о файлах
и директориях. Он расширяет базовый интерфейс fs.FS
и добавляет метод Stat, который возвращает информацию
о файле или директории по указанному пути. В качестве первого
параметра метод принимает путь к файлу или директории в виде
строки, а возвращает объект fs.FileInfo, содержащий
информацию о файле, и ошибку, если файл не существует
или недоступен.
Синтаксис
type StatFS interface {
FS
Stat(name string) (fs.FileInfo, error)
}
Пример использования с os.DirFS
Рассмотрим пример получения информации о файле с помощью
интерфейса fs.StatFS, используя файловую систему,
созданную через os.DirFS:
package main
import (
"fmt"
"os"
"io/fs"
)
func main() {
fsys := os.DirFS(".")
if statFS, ok := fsys.(fs.StatFS); ok {
info, err := statFS.Stat("main.go")
if err != nil {
fmt.Printf("Error: %v", err)
return
}
fmt.Printf("Name: %s", info.Name())
fmt.Printf("Size: %d bytes", info.Size())
fmt.Printf("IsDir: %t", info.IsDir())
fmt.Printf("Mode: %s", info.Mode())
}
}
Результат выполнения кода:
"Name: main.go"
"Size: 1024 bytes"
"IsDir: false"
"Mode: -rw-r--r--"
Пример с проверкой существования файла
Давайте проверим, существует ли файл в директории,
используя интерфейс fs.StatFS:
package main
import (
"fmt"
"os"
"io/fs"
)
func main() {
fsys := os.DirFS("./data")
if statFS, ok := fsys.(fs.StatFS); ok {
_, err := statFS.Stat("config.json")
if err != nil {
fmt.Println("File does not exist")
} else {
fmt.Println("File exists")
}
}
}
Результат выполнения кода:
"File exists"
Пример получения информации о директории
Рассмотрим, как получить информацию о директории
с помощью интерфейса fs.StatFS:
package main
import (
"fmt"
"os"
"io/fs"
)
func main() {
fsys := os.DirFS(".")
if statFS, ok := fsys.(fs.StatFS); ok {
info, err := statFS.Stat(".")
if err != nil {
fmt.Printf("Error: %v", err)
return
}
fmt.Printf("Directory name: %s", info.Name())
fmt.Printf("Is directory: %t", info.IsDir())
fmt.Printf("Size: %d bytes", info.Size())
}
}
Результат выполнения кода:
"Directory name: ."
"Is directory: true"
"Size: 4096 bytes"
Смотрите также
-
интерфейс
fs.FS,
который является базовым интерфейсом для файловых систем -
функцию
os.Stat,
которая возвращает информацию о файле в операционной системе -
интерфейс
fs.ReadFileFS,
который добавляет поддержку чтения файлов -
интерфейс
fs.ReadDirFS,
который добавляет поддержку чтения директорий