一尘不染

golang:跨平台路径。

go

我想path.Dir()在Unix和Windows上使用特定于平台的目录。请看一下代码:

package main

import (
    "fmt"
    "path"
)

func main() {
    fmt.Println(`path.Dir("a/b/c"): `, path.Dir("a/b/c"))
    fmt.Println(`path.Dir("c:\foo\bar.exe"): `, path.Dir(`c:\foo\bar.exe`))
}

这个输出

path.Dir("a/b/c"):  a/b
path.Dir("c:\foo\bar.exe"):  .

我想第二次打电话给path.Dir()(windows)类似

c:\foo

是否可以告诉path.dir()我在Windows上运行的程序使用Windows分隔符?还是应该始终将反斜杠转换\
为正斜杠(/)?这里首选的策略是什么?


阅读 328

收藏
2020-07-02

共1个答案

一尘不染

我看到“问题”在哪里。在golang-nuts上的讨论为我提供了提示,该提示path.Dir()始终使用/并且filepath.Dir()是用于依赖平台的操作的函数。

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    fmt.Println(`filepath.Dir("a/b/c"): `, filepath.Dir("a/b/c"))
    fmt.Println(`filepath.Dir("c:\foo\bar.exe"): `, filepath.Dir(`c:\foo\bar.exe`))
}

在Windows上:

filepath.Dir("a/b/c"):  a\b
filepath.Dir("c:\foo\bar.exe"):  c:\foo
2020-07-02