Что такое inode и какое отношение он имеет к Go?

Ответ

Inode (сокращение от index node) — это фундаментальная структура данных в Unix-подобных файловых системах (Linux, macOS). Она хранит всю метаинформацию о файле или каталоге, кроме его имени и содержимого.

Что хранится в inode:

  • Тип файла: обычный файл, каталог, символическая ссылка и т.д.
  • Права доступа (read, write, execute).
  • ID владельца (пользователя и группы).
  • Размер файла в байтах.
  • Временные метки: время создания (ctime), последнего доступа (atime), последней модификации (mtime).
  • Количество жестких ссылок на этот inode.
  • Указатели на блоки данных, где хранится содержимое файла.

Имя файла хранится отдельно в структуре каталога и просто ссылается на номер inode. Это позволяет создавать жесткие ссылки (hard links) — несколько имен в файловой системе могут указывать на один и тот же inode (и, следовательно, на одни и те же данные).

Отношение к Go

В Go вы не работаете с номерами inode напрямую через стандартную библиотеку, так как это платформо-зависимая деталь. Вместо этого вы получаете доступ к метаданным из inode через структуру os.FileInfo, которую возвращает функция os.Stat().

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    fileInfo, err := os.Stat("myfile.txt")
    if err != nil {
        log.Fatal(err)
    }

    // fileInfo предоставляет доступ к данным из inode
    fmt.Printf("Размер файла: %d байтn", fileInfo.Size())
    fmt.Printf("Права доступа: %sn", fileInfo.Mode())
    fmt.Printf("Время последней модификации: %sn", fileInfo.ModTime())
}

Таким образом, для Go-разработчика inode — это скрытая под капотом ОС концепция, с которой он взаимодействует через кросс-платформенные абстракции пакета os.