Интерфейс fs.FileInfo

Интерфейс fs.FileInfo представляет информацию о файле или директории. Он содержит методы для получения имени файла, его размера, времени последнего изменения, режима доступа и определения, является ли объект директорией. Этот интерфейс часто возвращается функциями os.Stat, os.Lstat и os.File.Stat.

Методы интерфейса

Интерфейс fs.FileInfo содержит следующие методы:

Базовый пример использования

Получим информацию о существующем файле с помощью функции os.Stat:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  info, err := os.Stat("example.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("Name:", info.Name())
  fmt.Println("Size:", info.Size())
  fmt.Println("IsDir:", info.IsDir())
  fmt.Println("ModTime:", info.ModTime())
  fmt.Println("Mode:", info.Mode())
}

Результат выполнения кода (для существующего файла):

goName: example.txt
Size: 1024
IsDir: false
ModTime: 2026-09-04 12:34:56 +0000 UTC
Mode: -rw-r--r--

Определение типа объекта

Проверим, является ли объект файлом или директорией, с помощью метода IsDir:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  info, err := os.Stat("testdir")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  if info.IsDir() {
    fmt.Println("testdir is a directory")
  } else {
    fmt.Println("testdir is a file")
  }
}

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

gotestdir is a directory

Проверка режима доступа

Метод Mode возвращает режим доступа к файлу. Проверим наличие прав на запись:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  info, err := os.Stat("example.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  mode := info.Mode()
  if mode&0200 != 0 {
    fmt.Println("File is writable by owner")
  } else {
    fmt.Println("File is not writable by owner")
  }
}

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

goFile is writable by owner

Получение информации о временном файле

Создадим временный файл и получим его информацию:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.CreateTemp("", "temp-*.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  defer os.Remove(file.Name())
  defer file.Close()

  info, err := file.Stat()
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println("Temp file name:", info.Name())
  fmt.Println("Temp file size:", info.Size())
}

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

goTemp file name: temp-123456789.txt
Temp file size: 0

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

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