Функция os.Lstat
Функция os.Lstat возвращает информацию о файле или директории по указанному пути.
В отличие от функции os.Stat, которая переходит по символической ссылке
и возвращает информацию о целевом файле, os.Lstat возвращает информацию
о самой символической ссылке. В первый параметр функция принимает путь к файлу
в виде строки. Она возвращает интерфейс os.FileInfo и ошибку.
Синтаксис
os.Lstat(path string) (os.FileInfo, error)
Пример
Давайте получим информацию о файле с помощью функции os.Lstat:
package 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())
}
Результат выполнения кода:
"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
при работе с символической ссылкой:
package 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)
}
Результат выполнения кода:
"Lstat: link name: link.txt"
"Lstat: is symlink: true"
"Stat: target name: target.txt"
"Stat: is symlink: false"
Пример
Давайте проверим, существует ли файл, с помощью os.Lstat:
package 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")
}
}
Результат выполнения кода:
"File does not exist"
Смотрите также
-
функцию
os.Stat,
которая возвращает информацию о файле, переходя по символическим ссылкам -
функцию
os.Symlink,
которая создает символическую ссылку -
функцию
os.Readlink,
которая возвращает путь к целевому файлу символической ссылки -
функцию
os.SameFile,
которая проверяет, указывают ли два объекта на один файл