2012-08-26 18 views
6

मैं प्लेटफ़ॉर्म विशिष्ट निर्देशिका के साथ यूनिक्स और विंडोज पर path.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"): . 

मैं की तरह

c:\foo 

यह है करने के लिए path.Dir() (विंडोज़) कुछ दूसरी कॉल के लिए प्राप्त करना चाहते हैं विंडोज़ पर चल रहे मेरे प्रोग्राम के लिए विंडोज सेपरेटर्स का उपयोग करने के लिए path.dir() बताना संभव है? या क्या मुझे हमेशा स्लैश (/) अग्रेषित करने के लिए बैकस्लैश \ को परिवर्तित करना चाहिए? यहां पसंदीदा रणनीति क्या है?

उत्तर

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' के लिए है लायक है ओएस-विशिष्ट है। इसके अलावा, अगर आपको इसकी आवश्यकता है, तो filepath.ToSlash() और filepath.FromSlash() को स्लैश से अलग और ओएस-विशिष्ट में कनवर्ट करने के लिए उपयोग किया जा सकता है। –

+0

@RunningWild अच्छी सलाह, धन्यवाद। मैं, एक गैर-देशी वक्ता के रूप में, मानता हूं कि "स्लैश अलग पथ" दोनों का अर्थ हो सकता है (पीछे और आगे स्लेश)। अब मैं बेहतर जानता हूँ। – topskip

संबंधित मुद्दे