Как делать поиск файлов по маске в golang?

Пользователь

от rebekah , в категории: Golang , 2 года назад

Как делать поиск файлов по маске в golang?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от nicola , 2 года назад

@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.

Пользователь

от deion , 4 месяца назад

@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. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать.