path.IsAbs возвращает неправильный результат для Windows путей - PullRequest
0 голосов
/ 02 марта 2020

Документация path.IsAbs говорит, что IsAbs сообщает, является ли путь абсолютным. В моем коде есть функция, которая проверяет, является ли первый аргумент абсолютным, а если нет, то создает абсолютный путь.

func getPath() string {
    var dir string
    fmt.Printf("first arg -> %s and is it abs? %t\n", os.Args[1], path.IsAbs(os.Args[1]))
    if path.IsAbs(os.Args[1]) {
        dir = os.Args[1]
    } else {
        var currentDir string
        currentDir = filepath.Dir(os.Args[0])
        dir, _ = filepath.Abs(path.Join(currentDir, os.Args[1]))
    }
    return dir
}

Вывод first arg -> C:\Users\Mohammad\Music\Uncategorized\Telegram and is it abs? false

Но первый аргумент абсолютно, так куда я скучаю?

1 Ответ

5 голосов
/ 02 марта 2020

Глядя на исходный код этой функции, очевидно, что она просто проверяет, является ли первый символ пути /. Это означает, что он принимает стиль пути UNIX, а не стиль Windows с буквой диска. Но это поведение разработано и хорошо документировано. В самом начале документации прямо говорится:

Пакет пути должен использоваться только для путей, разделенных прямой косой чертой, таких как пути в URL-адресах. Этот пакет не работает с Windows путями с буквами дисков или обратными слешами; для манипулирования путями операционной системы используйте пакет path / filepath.

Таким образом, следуйте документации и используйте правильный пакет для вашего конкретного c варианта использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...