2011-10-14 19 views
7

फ़ाइलों या निर्देशिकाओं के लिए एक सामान्य चर नाम "पथ" है। दुर्भाग्य से यह गो में एक पैकेज का नाम भी है। इसके अलावा, DoIt में तर्क नाम के रूप में पथ बदलना, मैं संकलित करने के लिए यह कोड कैसे प्राप्त करूं?कोई एक वैरिएबल नाम का उपयोग उसी नाम के साथ गो में पैकेज के रूप में कैसे करता है?

package main 

import (
    "path" 
    "os" 
) 

func main() { 
    DoIt("file.txt") 
} 

func DoIt(path string) { 
    path.Join(os.TempDir(), path) 
} 

त्रुटि मैं मिलता है:

$6g pathvar.go 
pathvar.go:4: imported and not used: path 
pathvar.go:13: path.Join undefined (type string has no field or method Join) 

उत्तर

9

path string आयातित path पीछा कर रहा है। आप क्या कर सकते हैं आयातित पैकेज के उपनाम उदा।

pathpkg.Join(os.TempDir(), path) 
+0

मैं था:, import में लाइन "path"pathpkg "path" में बदल रहा है तो अपने कोड की शुरुआत इस

package main import ( pathpkg "path" "os" ) 

बेशक तरह से चला जाता है द्वारा pathpkg तो आप में DoIt कोड बदलना होगा डर है कि जवाब होगा ... इच्छा एक और तरीका था, लेकिन मैं इसे देख नहीं रहा हूँ। – Nate

+0

आप जानते हैं कि किस तरह का विडंबना है? पथ पैकेज कोड में यह सीमा नहीं है। यदि आप पथ पर एक नज़र डालें। स्प्लिट (http://golang.org/src/pkg/path/path.go?s=2665&707#L97), तो आप देखेंगे कि इसमें पथ नामक तर्क है। पथ को फ़ाइल में परिभाषित किया गया है, लेकिन आयात नहीं किया गया है ... – Nate

+3

यह सीमा वहां लागू नहीं होती है, क्योंकि वहां कोई पैकेज 'पथ' आयात नहीं किया गया है और छाया के लिए कोई अन्य 'पथ' चर नहीं है, लेकिन मुझे लगता है कि आप इसे पहले से ही जानते हैं। ;) – macbirdie

0
package main 

import (
    "path" 
    "os" 
) 

func main() { 
    DoIt("file.txt") 
} 

// Just don't introduce a same named thing in the scope 
// where you need to use the package qualifier. 
func DoIt(pth string) { 
    path.Join(os.TempDir(), pth) 
} 
+0

हाँ, यह करने का यह स्पष्ट तरीका है। मैं बस सोच रहा था कि क्या कोई और तरीका था ... – Nate

+0

बेशक यह ओपी का मतलब नहीं था। आपका जवाब पूरी तरह से अप्रासंगिक है। –