golang:跨平台路径.Dir

top*_*kip 9 windows path 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`))
}
Run Code Online (Sandbox Code Playgroud)

这输出

path.Dir("a/b/c"):  a/b
path.Dir("c:\foo\bar.exe"):  .
Run Code Online (Sandbox Code Playgroud)

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

c:\foo
Run Code Online (Sandbox Code Playgroud)

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

top*_*kip 13

我看到"问题"在哪里.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`))
}
Run Code Online (Sandbox Code Playgroud)

在Windows上:

filepath.Dir("a/b/c"):  a\b
filepath.Dir("c:\foo\bar.exe"):  c:\foo
Run Code Online (Sandbox Code Playgroud)

  • 值得注意的是,'path'的包概述表明它是针对斜杠分隔的路径而'path/filepath'是特定于os的.此外,如果需要,可以使用filepath.ToSlash()和filepath.FromSlash()来转换为斜杠分隔和特定于os的转换. (3认同)