2012-08-26 35 views
6

Unix ve Windows platformlarına özel bir dizin ile path.Dir() kullanmak istiyorum. koda bir göz atın:golang: çapraz platform yolu.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`)) 
} 

Bu

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

Ben

c:\foo 

bunu mı gibi path.Dir() (windows) bir şeye ikinci çağrı için almak istiyorum çıkarır Windows üzerinde çalışan programım için Windows ayırıcılarını kullanmak path.dir() anlatmak mümkün mü? Ya da eğik çizgileri (/) iletmek için her zaman \ ters eğik çizgi dönüştürmeli miyim? Burada tercih edilen strateji nedir?

cevap

10

"Sorun" nun nerede olduğunu görüyorum. This discussion at golang-nuts bana ipuçlarını verdi,her zaman / kullanıyor ve filepath.Dir() platform bağımlı manipülasyon için kullanılacak işlevdir. pencerelerde

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

O 'yolu' için paket bakış o çizgi ile ayrılmış yolları ve 'yol/filepath' için olduğunun belirtildiğini kaydetti değer os-özgüdür. Ayrıca, buna ihtiyacınız varsa, filepath.ToSlash() ve filepath.FromSlash(), eğik çizgi ile ayrılmış ve os özelliğine dönüştürmek için kullanılabilir. –

+0

@RunningWild İyi tavsiye, teşekkürler. Ben, ana dili olmayan bir konuşmacı olarak, "ayrılan yolların kesilmesi" nin her ikisini de (geri ve ileri eğik çizgileri) ifade edebileceğini varsayalım. Şimdi daha iyi biliyorum. – topskip

İlgili konular