path.IsAbs 为 Windows 路径返回错误的结果

Moh*_*adi -1 path absolute-path go

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
}
Run Code Online (Sandbox Code Playgroud)

输出是 first arg -> C:\Users\Mohammad\Music\Uncategorized\Telegram and is it abs? false

但第一个论点是绝对的,所以我错过了什么?

Ste*_*ich 5

查看此函数的源代码,很明显它只是检查路径的第一个字符是否为/. 这意味着它采用 UNIX 风格的路径,而不是带有驱动器号的 Windows 风格。但这种行为是设计使然,并且也有详细记录。就在文档的开头,它明确地说:

path 包应该只用于由正斜杠分隔的路径,例如 URL 中的路径。这个包不处理带有驱动器号或反斜杠的Windows 路径;要操作操作系统路径,请使用 path/filepath 包。

因此,请遵循文档并为您的特定用例使用正确的包。