Функция fs.ReadDir

Функция fs.ReadDir читает содержимое директории и возвращает срез []fs.DirEntry. В первый параметр передается интерфейс fs.FS, который представляет файловую систему, во второй параметр - путь к директории, содержимое которой нужно прочитать. Функция возвращает записи директории и ошибку, если она произошла.

Синтаксис

goentries, err := fs.ReadDir(fsys, dir)

Пример

Давайте прочитаем содержимое текущей директории:

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  entries, err := fs.ReadDir(os.DirFS("."), ".")
  if err != nil {
    fmt.Println(err)
    return
  }

  for _, entry := range entries {
    fmt.Println(entry.Name())
  }
}

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

go"file1.txt"
"file2.txt"
"dir1"
"dir2"

Пример

Давайте прочитаем содержимое вложенной директории "data":

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  entries, err := fs.ReadDir(os.DirFS("."), "data")
  if err != nil {
    fmt.Println(err)
    return
  }

  for _, entry := range entries {
    if entry.IsDir() {
      fmt.Printf("Directory: %s\n", entry.Name())
    } else {
      fmt.Printf("File: %s\n", entry.Name())
    }
  }
}

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

go"Directory: logs"
"File: config.json"
"File: settings.ini"

Пример

Давайте получим информацию о размере каждого файла в директории:

gopackage main

import (
  "fmt"
  "io/fs"
  "os"
)

func main() {
  entries, err := fs.ReadDir(os.DirFS("."), ".")
  if err != nil {
    fmt.Println(err)
    return
  }

  for _, entry := range entries {
    info, err := entry.Info()
    if err != nil {
      fmt.Printf("Error getting info for %s: %v\n", entry.Name(), err)
      continue
    }

    if !entry.IsDir() {
      fmt.Printf("%s: %d bytes\n", entry.Name(), info.Size())
    }
  }
}

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

go"file1.txt: 1024 bytes"
"file2.txt: 2048 bytes"

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

  • функцию os.ReadDir,
    которая читает содержимое директории через операционную систему
  • функцию filepath.WalkDir,
    которая обходит дерево директорий рекурсивно
  • функцию fs.Stat,
    которая получает информацию о файле или директории
  • интерфейс fs.DirEntry,
    который представляет запись директории в файловой системе