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

Функция filepath.WalkDir

Функция filepath.WalkDir рекурсивно обходит директорию, передавая каждый найденный файл или папку в функцию обратного вызова. В первый параметр мы передаем путь к корневой директории, во второй параметр мы передаем функцию обработчик, которая будет вызываться для каждого элемента.

Функция обработчик принимает три параметра: путь к текущему элементу (string), информацию о элементе (fs.DirEntry) и ошибку (error). Если при обходе возникает ошибка, она передается в обработчик, который может решить, как с ней поступить.

Синтаксис

filepath.WalkDir(root string, fn fs.WalkDirFunc) error

Пример

Давайте выполним простой обход директории и выведем пути всех файлов и папок:

package main import ( "fmt" "io/fs" "path/filepath" ) func main() { err := filepath.WalkDir(".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } fmt.Println(path) return nil }) if err != nil { fmt.Printf("Error walking directory: %v\n", err) } }

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

. main.go docs docs/readme.txt docs/images

Пример

Давайте выполним обход директории, но исключим из обхода папку с именем "docs":

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

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

. main.go Skipping directory: docs

Пример

Давайте выполним обход директории и выведем только файлы с расширением ".txt":

package main import ( "fmt" "io/fs" "path/filepath" "strings" ) func main() { err := filepath.WalkDir(".", func(path string, d fs.DirEntry, err error) error { if err != nil { return err } if !d.IsDir() && strings.HasSuffix(path, ".txt") { fmt.Println(path) } return nil }) if err != nil { fmt.Printf("Error walking directory: %v\n", err) } }

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

docs/readme.txt notes.txt backup/info.txt

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

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