Функция os.Readlink

Функция os.Readlink читает содержимое символической ссылки и возвращает путь, на который она указывает. В первый параметр мы передаем путь к символической ссылке. Функция возвращает строку с путем назначения и ошибку. Если путь не является символической ссылкой или произошла ошибка чтения, функция возвращает ошибку.

Синтаксис

gopath, err := os.Readlink(linkPath)

Пример

Давайте создадим символическую ссылку и прочитаем ее содержимое:

gopackage main

import (
  "fmt"
  "os"
)

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

  // Читаем содержимое ссылки
  res, err := os.Readlink("/tmp/link.txt")
  if err != nil {
    fmt.Println("Error reading symlink:", err)
    return
  }

  fmt.Println(res)
}

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

go"/tmp/original.txt"

Пример

Давайте попробуем прочитать содержимое обычного файла, а не символической ссылки:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  // Создаем обычный файл
  file, err := os.Create("/tmp/file.txt")
  if err != nil {
    fmt.Println("Error creating file:", err)
    return
  }
  file.Close()

  // Пытаемся прочитать файл как символическую ссылку
  res, err := os.Readlink("/tmp/file.txt")
  if err != nil {
    fmt.Println("Error:", err)
    return
  }

  fmt.Println(res)
}

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

go"Error: readlink /tmp/file.txt: invalid argument"

Пример

Давайте прочитаем содержимое символической ссылки с относительным путем:

gopackage main

import (
  "fmt"
  "os"
)

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

  // Читаем содержимое ссылки
  res, err := os.Readlink("/tmp/relative-link.txt")
  if err != nil {
    fmt.Println("Error reading symlink:", err)
    return
  }

  fmt.Println(res)
}

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

go"./original.txt"

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

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