РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
596 of 1593 menu

Интерфейс fs.DirEntry

Интерфейс fs.DirEntry представляет собой элемент директории (файл или папку), полученный при чтении содержимого каталога. Он используется в таких функциях как os.ReadDir и fs.ReadDir. Основное назначение этого интерфейса — предоставить быстрый доступ к основным свойствам записи без необходимости выполнять полноценный системный вызов Stat для каждого элемента. Интерфейс содержит методы: Name для получения имени, IsDir для проверки, является ли запись директорией, Type для получения типа файла в виде fs.FileMode, и Info для получения полной информации о записи в виде интерфейса fs.FileInfo.

Синтаксис

type DirEntry interface { Name() string IsDir() bool Type() FileMode Info() (FileInfo, error) }

Для работы с интерфейсом обычно не требуется его реализовывать вручную — стандартная библиотека предоставляет готовые структуры, например, при вызове os.ReadDir или filepath.WalkDir.

Пример

Давайте прочитаем содержимое текущей директории и выведем имена и типы всех элементов:

package main import ( "fmt" "os" ) func main() { entries, err := os.ReadDir(".") if err != nil { fmt.Println("Error reading directory:", err) return } for _, entry := range entries { fmt.Printf("%s (isDir: %t)\n", entry.Name(), entry.IsDir()) } }

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

"main.go (isDir: false)" "src (isDir: true)" "README.md (isDir: false)"

Пример

Для получения полной информации о файле, такой как размер или время изменения, используется метод Info:

package main import ( "fmt" "os" ) func main() { entries, err := os.ReadDir(".") if err != nil { fmt.Println("Error reading directory:", err) return } for _, entry := range entries { info, err := entry.Info() if err != nil { fmt.Printf("Error getting info for %s: %v\n", entry.Name(), err) continue } fmt.Printf("%s: %d bytes\n", entry.Name(), info.Size()) } }

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

"main.go: 1024 bytes" "src: 4096 bytes" "README.md: 512 bytes"

Пример

Интерфейс fs.DirEntry также используется при обходе дерева директорий с помощью filepath.WalkDir. Передаваемая в функцию обратного вызова запись позволяет принимать решения о дальнейшем обходе:

package main import ( "fmt" "path/filepath" ) func main() { err := filepath.WalkDir(".", func(path string, d filepath.DirEntry, err error) error { if err != nil { return err } if d.IsDir() && path != "." { fmt.Printf("Skip directory: %s\n", path) return filepath.SkipDir } fmt.Printf("Visit: %s\n", path) return nil }) if err != nil { fmt.Println("Error walking directory:", err) } }

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

"Visit: ." "Visit: main.go" "Skip directory: src"

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

  • функцию os.ReadDir,
    которая возвращает срез элементов директории в виде fs.DirEntry
  • функцию filepath.WalkDir,
    которая обходит дерево файловой системы с использованием fs.DirEntry
  • интерфейс fs.FileInfo,
    который предоставляет полную информацию о файле
  • функцию os.Stat,
    которая возвращает информацию о файле по его пути
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить