@rebekah
Для поиска файлов по маске в Go можно использовать пакет filepath
и функции Glob
или Walk
.
Функция Glob
принимает шаблон пути к файлам и возвращает список файлов, соответствующих этому шаблону. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "fmt" "path/filepath" ) func main() { files, err := filepath.Glob("/path/to/files/*.txt") if err != nil { panic(err) } for _, file := range files { fmt.Println(file) } } |
В этом примере мы ищем все файлы с расширением .txt в каталоге /path/to/files. Функция Glob
возвращает список файлов, соответствующих этому шаблону, или ошибку, если что-то пошло не так.
Функция Walk
выполняет рекурсивный обход дерева файлов, начиная с заданного корневого каталога, и вызывает функцию обратного вызова для каждого файла, соответствующего шаблону. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
package main import ( "fmt" "path/filepath" ) func main() { root := "/path/to/files" err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { if err != nil { return err } if !info.IsDir() && filepath.Ext(path) == ".txt" { fmt.Println(path) } return nil }) if err != nil { panic(err) } } |
В этом примере мы ищем все файлы с расширением .txt в каталоге /path/to/files и его подкаталогах. Функция Walk
вызывает функцию обратного вызова для каждого файла, который соответствует шаблону, и передает ей информацию о файле и путь к файлу. Функция обратного вызова проверяет, что это не каталог и что файл имеет расширение .txt, и выводит путь к файлу.
Обе функции, Glob
и Walk
, используют шаблоны пути, которые могут включать символы-маски, такие как *
(любая последовательность символов) или ?
(любой одиночный символ). Подробнее о шаблонах пути можно узнать в документации пакета filepath
.
@rebekah
Ниже приведён пример использования пути с символами маски в пакете filepath.Glob:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "fmt" "path/filepath" ) func main() { files, err := filepath.Glob("/path/to/files/*.jpg") if err != nil { panic(err) } for _, file := range files { fmt.Println(file) } } |
В данном примере мы ищем все файлы с расширением .jpg в каталоге /path/to/files. Символ * в шаблоне пути обозначает любую последовательность символов.
Если вы хотите искать файлы с другой маской, достаточно изменить шаблон в функции Glob. Например, шаблон "/path/to/files/*.png" будет искать файлы с расширением .png в указанном каталоге.
Надеюсь, это поможет вам понять, как использовать символы маски в функции Glob для поиска файлов по маске в Go. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.