path.IsAbs 为 Windows 路径返回不正确的结果

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


但是第一个论点是绝对的,那么我在哪里失踪了?


慕森卡
浏览 138回答 2
2回答

蝴蝶不菲

查看此函数的源代码,很明显它只是检查路径的第一个字符是否为/. 这意味着它采用 UNIX 样式的路径,而不是带有驱动器号的 Windows 样式。但是这种行为是设计使然,并且也有据可查。在文档的开头,它明确地说:path 包只能用于由正斜杠分隔的路径,例如 URL 中的路径。此软件包不处理带有驱动器号或反斜杠的 Windows 路径;要操作操作系统路径,请使用 path/filepath 包。因此,请遵循文档并为您的特定用例使用正确的包。

沧海一幻觉

对于 Windows 操作系统,您可以使用C:\\Users\\Mohammad\\Music\\Uncategorized\\Telegram或者C:/Users/Mohammad/Music/Uncategorized/Telegram他们应该在你的情况下完美地工作。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go