Функция os.Lstat

Функция os.Lstat возвращает информацию о файле или директории по указанному пути. В отличие от функции os.Stat, которая переходит по символической ссылке и возвращает информацию о целевом файле, os.Lstat возвращает информацию о самой символической ссылке. В первый параметр функция принимает путь к файлу в виде строки. Она возвращает интерфейс os.FileInfo и ошибку.

Синтаксис

goos.Lstat(path string) (os.FileInfo, error)

Пример

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

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  info, err := os.Lstat("example.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }
  fmt.Println("File name:", info.Name())
  fmt.Println("File size:", info.Size())
  fmt.Println("Is directory:", info.IsDir())
  fmt.Println("File mode:", info.Mode())
  fmt.Println("Modification time:", info.ModTime())
}

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

go"File name: example.txt"
"File size: 1024"
"Is directory: false"
"File mode: -rw-r--r--"
"Modification time: 2026-09-04 12:34:56 +0000 UTC"

Пример

Давайте посмотрим разницу между os.Lstat и os.Stat при работе с символической ссылкой:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  // Создаем символическую ссылку
  err := os.Symlink("target.txt", "link.txt")
  if err != nil {
    fmt.Println("Error creating symlink:", err)
    return
  }

  // Получаем информацию о ссылке
  linkInfo, err := os.Lstat("link.txt")
  if err != nil {
    fmt.Println("Lstat error:", err)
    return
  }
  fmt.Println("Lstat: link name:", linkInfo.Name())
  fmt.Println("Lstat: is symlink:", linkInfo.Mode()&os.ModeSymlink != 0)

  // Получаем информацию о целевом файле
  targetInfo, err := os.Stat("link.txt")
  if err != nil {
    fmt.Println("Stat error:", err)
    return
  }
  fmt.Println("Stat: target name:", targetInfo.Name())
  fmt.Println("Stat: is symlink:", targetInfo.Mode()&os.ModeSymlink != 0)
}

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

go"Lstat: link name: link.txt"
"Lstat: is symlink: true"
"Stat: target name: target.txt"
"Stat: is symlink: false"

Пример

Давайте проверим, существует ли файл, с помощью os.Lstat:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  _, err := os.Lstat("nonexistent.txt")
  if os.IsNotExist(err) {
    fmt.Println("File does not exist")
  } else if err != nil {
    fmt.Println("Other error:", err)
  } else {
    fmt.Println("File exists")
  }
}

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

go"File does not exist"

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

  • функцию os.Stat,
    которая возвращает информацию о файле, переходя по символическим ссылкам
  • функцию os.Symlink,
    которая создает символическую ссылку
  • функцию os.Readlink,
    которая возвращает путь к целевому файлу символической ссылки
  • функцию os.SameFile,
    которая проверяет, указывают ли два объекта на один файл