Как получить корень файловой системы в Go независимо от ОС
Я хочу получить корневой каталог файловой системы в Go таким образом, чтобы он работал как в Windows, так и в Unix.
Я думал, что могу сделать что-то вроде
func fsRootDir() string {
s := os.Getenv("SystemDrive")
if s != "" {
return s
}
return "/"
}
Однако с этим есть пара проблем, поэтому я отказался от этого подхода:
- Пользователь может создать переменную среды в Unix с каким-то фиктивным путем.
- Пользователь может изменить значение переменной среды в Windows на какой-то фиктивный путь.
Я посмотрел на этот ответ на связанный вопрос , но это также имеет некоторые проблемы:
- Первый вариант зависит от
SystemDrive
переменная окружения, которая по указанным выше причинам не гарантирует ожидаемое значение ни в Unix, ни в Windows. - Все остальные варианты в этом ответе зависят от . В Windows,
os.TempDir
используетGetTempPath
, возвращая первое непустое значение из%TMP%
,%TEMP%
,%USERPROFILE%
, или каталог Windows. Я не верю, что могу доверять тому, что эти переменные среды не были изменены.
я тоже считал
func fsRootDir() string {
if runtime.GOOS == "windows" {
return "C:"
}
return "/"
}
но я думал, что где-то читал, что можно изменить корень файловой системы в Windows на что-то другое, чемC:
.
Как я могу получить корневой каталог файловой системы таким образом, чтобы он работал как в Windows, так и в Unix?
1 ответ
Почему бы не объединить их?
func fsRootDir() string {
if runtime.GOOS == "windows" {
return os.Getenv("SystemDrive")
}
return "/"
}
Пользователь может изменить значение переменной среды SystemDrive в Windows на какой-то фиктивный путь.
Нет, они не могут,SystemDrive
является переменной только для чтения.