2012-08-26 78 views
6

我想在Unix和Windows上使用path.Dir()以及平臺特定的目錄。請看一看代碼:golang:跨平臺路徑.Dir

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()(窗口)類似

c:\foo 

是它可能告訴path.dir()使用Windows分隔符爲我的程序在Windows上運行?或者我應該總是將反斜槓\轉換爲正斜槓(/)?這裏的首選策略是什麼?

回答

10

我看到「問題」在哪裏。 This discussion at 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`)) 
} 

上窗口:

filepath.Dir("a/b/c"): a\b 
filepath.Dir("c:\foo\bar.exe"): c:\foo 
+3

值得注意的是關於「路徑」的包概述說,它是用於斜線分割通路和「路徑/文件路徑」是與操作系統相關的。另外,如果您需要它,可以使用filepath.ToSlash()和filepath.FromSlash()來轉換和從斜槓分離和特定於os的轉換。 –

+0

@RunningWild很好的建議,謝謝。作爲一個非母語的人,我認爲「斜線分開的路徑」可以同時表示(後退斜線和正斜線)。現在我知道更好。 – topskip