В данной инструкции показано, как получить список содержимого папки в Golang.
Как получить список файлов из папке на Golang?
1. Создайте директорию под названием folder
;
2. Создайте файл listdir.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
package main import ( "fmt" "io/ioutil" "os" "path/filepath" ) func main() { fmt.Println("List by ReadDir") listDirByReadDir(".") fmt.Println() fmt.Println("List by Walk") listDirByWalk(".") } func listDirByWalk(path string) { filepath.Walk(path, func(wPath string, info os.FileInfo, err error) error { // Обход директории без вывода if wPath == path { return nil } // Если данный путь является директорией, то останавливаем рекурсивный обход // и возвращаем название папки if info.IsDir() { fmt.Printf("[%s]\n", wPath) return filepath.SkipDir } // Выводится название файла if wPath != path { fmt.Println(wPath) } return nil }) } func listDirByReadDir(path string) { lst, err := ioutil.ReadDir(path) if err != nil { panic(err) } for _, val := range lst { if val.IsDir() { fmt.Printf("[%s]\n", val.Name()) } else { fmt.Println(val.Name()) } } } |
3. Запустите код через go run listdir.go
в главном терминале;
4. Посмотрите на следующий результат:
В примера выше используется два подхода для решения задачи. Первый, более простой, реализуется через использование функции listDirByReadDir
и ReadDir
из пакета ioutil
. Данная функция возвращает срез структуры FileInfo
, что представляет действительный контент директории. Обратите внимание, что функция ReadDir
не читает папки рекурсивно. По факту, функция ReadDir
использует метод Readdir
типа File
из пакета os
.
С другой стороны, более сложный listDirByWalk
использует функцию filepath.Walk
, что принимает путь для обхода и в котором есть функция, что обрабатывает каждый файл или папку по данному пути. Главная разница в том, что функция Walk
обходит директорию рекурсивно. Основой данного подхода является тип WalkFunc
, где его функция нужна для получения результатов списка.
Обратите внимание, что функция блокирует рекурсивный вызов для базовых папок, возвращая ошибку filepath.SkipDir
. Функция Walk
также обрабатывает только указанный путь, игнорируя файлы из папок внутри указанного пути (в данном случае мы пропускаем вывод и возвращаем nil, потому что нам нужно обойти данную папку рекурсивно).
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»