गो - स्कोप नियम

किसी भी प्रोग्रामिंग में एक गुंजाइश कार्यक्रम का एक क्षेत्र है जहां एक परिभाषित चर मौजूद हो सकता है और उससे परे चर को एक्सेस नहीं किया जा सकता है। गो प्रोग्रामिंग भाषा में ऐसे तीन स्थान हैं जहां चर घोषित किए जा सकते हैं -

  • किसी फ़ंक्शन या ब्लॉक के अंदर (local चर)

  • सभी कार्यों के बाहर (global चर)

  • फ़ंक्शन मापदंडों की परिभाषा में (formal पैरामीटर)

आइए हम जानें कि क्या हैं local तथा global चर और क्या हैं formal मापदंडों।

स्थानीय चर

चर जिन्हें किसी फ़ंक्शन या ब्लॉक के अंदर घोषित किया जाता है, उन्हें स्थानीय चर कहा जाता है। उनका उपयोग केवल उन कथनों द्वारा किया जा सकता है जो उस फ़ंक्शन या कोड के ब्लॉक के अंदर हैं। स्थानीय चर अपने स्वयं के कार्यों के लिए ज्ञात नहीं हैं। निम्न उदाहरण स्थानीय चर का उपयोग करता है। यहाँ सभी वैरिएबल a, b, और c मुख्य () फंक्शन के लिए लोकल हैं।

package main

import "fmt"

func main() {
   /* local variable declaration */
   var a, b, c int 

   /* actual initialization */
   a = 10
   b = 20
   c = a + b

   fmt.Printf ("value of a = %d, b = %d and c = %d\n", a, b, c)
}

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

value of a = 10, b = 20 and c = 30

सार्वत्रिक चर

वैश्विक चर को एक फ़ंक्शन के बाहर परिभाषित किया जाता है, आमतौर पर कार्यक्रम के शीर्ष पर। वैश्विक चर पूरे कार्यक्रम के दौरान उनका मूल्य रखते हैं और उन्हें कार्यक्रम के लिए परिभाषित किसी भी कार्य के अंदर पहुँचा जा सकता है।

एक वैश्विक चर को किसी भी फ़ंक्शन द्वारा एक्सेस किया जा सकता है। यही है, एक वैश्विक चर इसकी घोषणा के बाद पूरे कार्यक्रम में उपयोग के लिए उपलब्ध है। निम्नलिखित उदाहरण दोनों वैश्विक और स्थानीय चर का उपयोग करता है -

package main

import "fmt"
 
/* global variable declaration */
var g int
 
func main() {
   /* local variable declaration */
   var a, b int

   /* actual initialization */
   a = 10
   b = 20
   g = a + b

   fmt.Printf("value of a = %d, b = %d and g = %d\n", a, b, g)
}

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

value of a = 10, b = 20 and g = 30

एक प्रोग्राम में स्थानीय और वैश्विक चर के लिए एक ही नाम हो सकता है लेकिन एक फ़ंक्शन के अंदर स्थानीय चर का मूल्य वरीयता लेता है। उदाहरण के लिए -

package main

import "fmt"
 
/* global variable declaration */
var g int = 20
 
func main() {
   /* local variable declaration */
   var g int = 10
 
   fmt.Printf ("value of g = %d\n",  g)
}

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

value of g = 10

औपचारिक पैरामीटर

औपचारिक मापदंडों को उस फ़ंक्शन में स्थानीय चर के रूप में माना जाता है और वे वैश्विक चर पर वरीयता लेते हैं। उदाहरण के लिए -

package main

import "fmt"
 
/* global variable declaration */
var a int = 20;
 
func main() {
   /* local variable declaration in main function */
   var a int = 10
   var b int = 20
   var c int = 0

   fmt.Printf("value of a in main() = %d\n",  a);
   c = sum( a, b);
   fmt.Printf("value of c in main() = %d\n",  c);
}
/* function to add two integers */
func sum(a, b int) int {
   fmt.Printf("value of a in sum() = %d\n",  a);
   fmt.Printf("value of b in sum() = %d\n",  b);

   return a + b;
}

जब उपरोक्त कोड संकलित और निष्पादित किया जाता है, तो यह निम्नलिखित परिणाम उत्पन्न करता है -

value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in main() = 30

स्थानीय और वैश्विक चर की शुरुआत

स्थानीय और वैश्विक चर उनके डिफ़ॉल्ट मान के लिए आरंभिक हैं, जो 0 है; जबकि संकेत शून्य करने के लिए आरंभीकृत होते हैं।

डाटा प्रकार प्रारंभिक डिफ़ॉल्ट मान
पूर्णांक 0
float32 0
सूचक शून्य