os.Root
Тип os.Root
(Go 1.24+) ограничивает операции с файловой системой определенной директорией.
Функция OpenRoot
открывает директорию и возвращает Root
:
dir, err := os.OpenRoot("data")
fmt.Println(dir.Name(), err)
// data <nil>
Методы Root
работают внутри директории и не позволяют использовать пути за ее пределами:
file, err := dir.Open("01.txt")
fmt.Println(file.Name(), err)
// data/01.txt <nil>
file, err = dir.Open("../main.txt")
fmt.Println(err)
// openat ../main.txt: path escapes from parent
Методы Root
поддерживают большинство операций с файловой системой, доступных в пакете os
:
file, err := dir.Create("new.txt")
stat, err := dir.Stat("02.txt")
err = dir.Remove("03.txt")
Поработав с Root
, не забудьте положить на место его закрыть:
dir, err := os.OpenRoot(path)
defer dir.Close()
// do stuff
На большинстве платформ создание Root
открывает файловый дескриптор. Если директорию переместить пока Root
открыт, методы будут корректно использовать новый каталог.
★ Подписывайтесь на новые заметки.