जैसा कि दूसरों ने पहले ही समझाया है, :=
घोषणा, असाइनमेंट और पुनर्वितरण दोनों के लिए है; और यह अनुमान लगाता है ( शिशुओं ) चर के प्रकार स्वचालित रूप से।
उदाहरण के लिए, foo := 32
एक संक्षिप्त रूप है:
var foo int
foo = 32
// OR:
var foo int = 32
// OR:
var foo = 32
/ * कुछ नियम हैं: * /
★ पहला नियम:
आप उपयोग नहीं कर सकते :=
से बाहर funcs
। ऐसा इसलिए है, क्योंकि किसी भी फंक से बाहर, एक स्टेटमेंट को एक कीवर्ड से शुरू करना चाहिए।
// no keywords below, illegal.
illegal := 42
// `var` keyword makes this statement legal.
var legal = 42
func foo() {
alsoLegal := 42
// reason: it's in a func scope.
}
★ दूसरा नियम:
आप उन्हें दो बार ( एक ही दायरे में ) उपयोग नहीं कर सकते :
legal := 42
legal := 42 // <-- error
क्योंकि, "एक नया चर" का:=
परिचय देता है , इसलिए दो बार इसका उपयोग करने से दूसरे चर का पुनर्वितरण नहीं होता है, इसलिए यह अवैध है।
★ तीसरा नियम:
आप उन्हें बहु-चर घोषणाओं और असाइनमेंट के लिए उपयोग कर सकते हैं:
foo, bar := 42, 314
jazz, bazz := 22, 7
★ चौथा नियम (पुनर्वितरण):
यदि आप चर में से एक नया है , तो आप उन्हें दो बार "बहु-चर" घोषणाओं में उपयोग कर सकते हैं :
foo, bar := someFunc()
foo, jazz := someFunc() // <-- jazz is new
baz, foo := someFunc() // <-- baz is new
यह कानूनी है, क्योंकि, आप सभी चरों की घोषणा नहीं कर रहे हैं, आप मौजूदा चरों के नए मानों को फिर से असाइन कर रहे हैं, और एक ही समय में नए चर घोषित कर रहे हैं। इसे पुनर्वितरण कहा जाता है ।
★ 5 वां नियम:
आप एक नए क्षेत्र में एक चर घोषित करने के लिए छोटी घोषणा का उपयोग कर सकते हैं, यहां तक कि चर पहले से ही इसी नाम से घोषित किया गया है:
var foo int = 34
func some() {
// because foo here is scoped to some func
foo := 42 // <-- legal
foo = 314 // <-- legal
}
यहाँ, foo := 42
कानूनी है, क्योंकि, यह कवक के दायरे foo
में घोषित करता है some()
। foo = 314
कानूनी है, क्योंकि, यह सिर्फ एक नया मान प्रदान करता है foo
।
★ 6 वां नियम:
आप संक्षिप्त विवरण ब्लॉक में एक ही नाम घोषित कर सकते हैं जैसे: if , for , switch :
foo := 42
if foo := someFunc(); foo == 314 {
// foo is scoped to 314 here
// ...
}
// foo is still 42 here
क्योंकि, foo
में if foo := ...
, केवल उस if
खंड के अंतर्गत आता है और यह एक अलग दायरे में है।
इसलिए, एक सामान्य नियम के रूप में: यदि आप आसानी से एक चर घोषित कर सकते हैं जिसका आप उपयोग कर सकते हैं :=
, या, यदि आप केवल मौजूदा चर को अधिलेखित करना चाहते हैं, तो आप उपयोग कर सकते हैं =
।
संदर्भ: