В данной инструкции показано, как получить список содержимого папки в 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, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»