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

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

Интерфейс fs.GlobFS представляет собой файловую систему, которая поддерживает поиск файлов и директорий по шаблону (glob pattern). Он включает один метод Glob, который принимает шаблон для поиска и возвращает список имен файлов, соответствующих этому шаблону, или ошибку. Этот интерфейс полезен, когда нужно найти все файлы, удовлетворяющие определенному шаблону, например, все файлы с расширением .go или все файлы, начинающиеся с определенного префикса.

Синтаксис

type GlobFS interface { Glob(pattern string) ([]string, error) }

Метод Glob принимает строку с шаблоном и возвращает срез строк с именами файлов, которые соответствуют шаблону. Если ни один файл не соответствует шаблону, возвращается пустой срез и ошибка nil. В случае ошибки поиска возвращается nil и ошибка.

Пример использования с os.DirFS

Давайте создадим файловую систему с помощью os.DirFS и найдем все файлы с расширением .txt в текущей директории:

package main import ( "fmt" "os" ) func main() { fsys := os.DirFS(".") matches, err := fsys.(interface{ Glob(string) ([]string, error) }).Glob("*.txt") if err != nil { fmt.Println("Error:", err) return } fmt.Println(matches) }

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

["file1.txt" "file2.txt" "notes.txt"]

В этом примере мы используем приведение типа для вызова метода Glob, так как os.DirFS реализует интерфейс fs.GlobFS.

Пример с различными шаблонами

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

package main import ( "fmt" "os" ) func main() { fsys := os.DirFS("testdata") patterns := []string{"*.go", "test_*", "*_test.go", "data[0-9].txt"} for _, pattern := range patterns { matches, err := fsys.(interface{ Glob(string) ([]string, error) }).Glob(pattern) if err != nil { fmt.Printf("Pattern %q: error - %v\n", pattern, err) continue } fmt.Printf("Pattern %q: %v\n", pattern, matches) } }

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

Pattern "*.go": ["main.go" "utils.go"] Pattern "test_*": ["test_main.go" "test_utils.go"] Pattern "*_test.go": ["main_test.go" "utils_test.go"] Pattern "data[0-9].txt": ["data1.txt" "data2.txt"]

Этот пример демонстрирует, как различные шаблоны могут использоваться для гибкого поиска файлов.

Пример обработки ошибок

Давайте рассмотрим, как обрабатывать ошибки при использовании метода Glob:

package main import ( "fmt" "os" ) func main() { fsys := os.DirFS("/nonexistent/directory") matches, err := fsys.(interface{ Glob(string) ([]string, error) }).Glob("*.txt") if err != nil { fmt.Println("Error occurred:", err) return } if len(matches) == 0 { fmt.Println("No files found") return } fmt.Println("Found files:", matches) }

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

"Error occurred: open /nonexistent/directory: no such file or directory"

В этом примере мы пытаемся выполнить поиск в несуществующей директории, что приводит к ошибке.

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

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