2013-09-05 7 views
9

मैं golang को एक newbee हूँ, और मैं कब पैकेज का परीक्षण करने के लिए एक प्रोग्राम लिखने:गोलांग कंपाइलर क्यों लगता है कि वैरिएबल घोषित किया गया है लेकिन इसका उपयोग नहीं किया जाता है?

func main() { 
    readers := []io.Reader{ 
     strings.NewReader("from string reader"), 
     bytes.NewBufferString("from bytes reader"), 
    } 

    reader := io.MultiReader(readers...) 
    data := make([]byte, 1024) 

    var err error 
    //var n int 

    for err != io.EOF { 
     n, err := reader.Read(data) 
     fmt.Printf("%s\n", data[:n]) 
    } 
    os.Exit(0) 
} 

संकलन त्रुटि "घोषित भूल करते हैं और उपयोग नहीं किया" है। लेकिन मुझे लगता है कि मैंने कथन के लिए गलत इस्तेमाल किया है। संकलक इस त्रुटि को आउटपुट क्यों करता है?

+0

आप लगभग सभी कोड को 'n, err: = io.Copy (os.Stdout, io.MultiReader (पाठक ...) '(और' os.Exit (0)' अंत में अनावश्यक है) – Dustin

उत्तर

18

err के अंदर के लिए err के लिए छायांकन कर रहा है, और इसका उपयोग नहीं किया जा रहा है (इसके अंदर के अंदर)। ऐसा इसलिए होता है क्योंकि आप लघु परिवर्तनीय घोषणा (:= ऑपरेटर के साथ) का उपयोग कर रहे हैं जो एक नया err वैरिएबल घोषित करता है जो कि बाहर के लिए घोषित एक छाया को छाया करता है।

+1

छायांकन मुश्किल है – Gustav

+0

मैं इस धारणा के तहत था कि '=' लघु घोषणा ऑपरेटर, जब कई मानों पर उपयोग किया जाता है, तो आप उनमें से कुछ को पूर्व-घोषित चर के लिए उपयोग करते हैं, जब तक कि कम से कम एक था नए घोषित किए जा रहे हैं। इस मामले में क्यों पहले यह घोषित नहीं किया गया है कि यह मामला घोषित किया गया है? – thomasrutter

+0

@ थॉमसट्रटर क्योंकि ये घोषणाएं अलग-अलग ब्लॉक में हैं – aromero

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