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

Функция fs.WalkDir

Функция fs.WalkDir используется для рекурсивного обхода всех файлов и директорий. В первый параметр передается файловая система (обычно os.DirFS), во второй — корневой путь для обхода, а в третий — функция обратного вызова, которая будет вызываться для каждого элемента. Функция обратного вызова принимает путь, fs.DirEntry и ошибку, что делает обход более эффективным по сравнению с filepath.Walk.

Синтаксис

fs.WalkDir(fsys fs.FS, root string, fn fs.WalkDirFunc) error

Пример

Давайте выведем все пути в текущей директории:

package main import ( "fmt" "fs" "os" ) func main() { fsys := os.DirFS(".") err := fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } fmt.Println(path) return nil }) if err != nil { fmt.Println("Error:", err) } }

Пример

Давайте соберем имена всех файлов в слайс:

package main import ( "fmt" "fs" "os" ) func main() { var files []string fsys := os.DirFS(".") fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if !d.IsDir() { files = append(files, path) } return nil }) fmt.Println(files) }

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

[file1.txt file2.go dir/file3.md]

Пример

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

package main import ( "fmt" "fs" "os" ) func main() { count := 0 fsys := os.DirFS(".") fs.WalkDir(fsys, ".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if d.IsDir() && path == "node_modules" { return fs.SkipDir } count++ return nil }) fmt.Println("Total entries:", count) }

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

"Total entries: 42"

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

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