2012-08-26 10 views
6

Tôi muốn sử dụng path.Dir() trên Unix và Windows với thư mục nền tảng cụ thể. Hãy dành một cái nhìn tại các mã:golang: đường dẫn nền tảng chéo.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`)) 
} 

này kết quả đầu ra

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

Tôi muốn nhận được cho các cuộc gọi thứ hai để path.Dir() (cửa sổ) cái gì đó như

c:\foo 

Có có thể cho biết path.dir() để sử dụng bộ tách Windows cho chương trình của tôi đang chạy trên các cửa sổ không? Hoặc tôi có nên luôn luôn chuyển đổi các dấu gạch chéo ngược \ để chuyển tiếp dấu gạch chéo (/)? Chiến lược ưa thích ở đây là gì?

Trả lời

10

Tôi thấy "vấn đề" ở đâu. This discussion at golang-nuts cho tôi gợi ý rằng path.Dir() luôn sử dụng /filepath.Dir() là chức năng được sử dụng cho thao tác phụ thuộc nền tảng.

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`)) 
} 

trên cửa sổ:

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

Nó đáng chú ý là tổng quan về gói cho 'con đường' khẳng định rằng nó là dành cho đường dẫn slash-tách ra và 'path/filepath' là os-cụ thể. Ngoài ra, nếu bạn cần nó, filepath.ToSlash() và filepath.FromSlash() có thể được sử dụng để chuyển đổi sang và từ tách riêng biệt và theo đặc trưng của os. –

+0

@RunningWild Lời khuyên tốt, cảm ơn. Tôi, với tư cách là một người nói không phải là người bản địa, giả định rằng "các đường gạch chéo tách biệt" có thể có nghĩa là cả hai dấu gạch chéo ngược và lùi. Bây giờ tôi biết rõ hơn. – topskip