2014-05-08 5 views
11

यह गो प्रोग्राम संकलित नहीं होगा। यह त्रुटि फेंकता global_var declared and not usedसंयुक्त घोषणा/असाइनमेंट ऑपरेटर के साथ वैश्विक परिवर्तनीय इनलाइन असाइनमेंट और एक अन्य अविकसित परिवर्तनीय खोपड़ी गुंजाइश?

package main 

import "log" 

var global_var int 

func main() { 

    global_var, new_string := returnTwoVars() 

    log.Println("new_string: " + new_string) 
} 

func returnTwoVars() (int, string) { 
    return 1234, "woohoo" 
} 

func usesGlobalVar() int { 
    return global_var * 2 
} 

हालांकि, जब मैं मुख्य समारोह में new_string घोषित करने और बस = का उपयोग करके := ऑपरेटर का उपयोग की आवश्यकता को दूर, संकलक देखकर कि global_var घोषित किया जाता है के साथ एक समस्या नहीं है वैश्विक स्तर पर और कार्यक्रम में कहीं और इस्तेमाल किया जा रहा है। मेरा अंतर्ज्ञान मुझे बताता है कि उसे पता होना चाहिए कि global_var पहले ही घोषित किया गया है

उत्तर

13

कंपाइलर मुख्य के बाहर global_var के बारे में शिकायत नहीं करता है। यह केवल नए बनाए गए global_var के बारे में शिकायत करता है जो मुख्य में उपयोग नहीं करता है। go उल्लेख पंक्ति संख्या को देखकर आप जांच सकते हैं।

आप किसी भी फ़ंक्शन के बाहर global_var के साथ एक खाली प्रोग्राम आज़मा सकते हैं, जिसमें कोई भी संदर्भ नहीं है: कोई समस्या नहीं है। और निश्चित रूप से, usesGlobalVar फ़ंक्शन संदर्भ वास्तविक वैश्विक प्रतीक के main में आपके द्वारा बनाई गई किसी भी चीज़ के साथ कुछ लेना देना नहीं है।

+4

"गोलांग छाया" के लिए खोजें। यदि आप किसी आंतरिक क्षेत्र में किसी बाहरी क्षेत्र से नाम का पुनर्विक्रय करते हैं, तो आपके पास एक नया नया चर है। अक्सर, यहां के रूप में, यह भ्रमित है। – twotwotwo

+3

मुझे लगता है: = किसी भी वेरिएबल को घोषित करेगा जो स्थानीय दायरे में घोषित नहीं किया गया है। यह संदिग्ध लगता है लेकिन मुझे लगता है कि यह वही तरीका है जो चीजें हैं। – BlinkyTop

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