Как получить корень файловой системы в 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является переменной только для чтения.

Другие вопросы по тегам