मॉड्यूल पाठ (1/5)
निश्चित-लंबाई सरणियाँ
गो में एक सरणी की एक निश्चित लंबाई होती है, जिसे इसके प्रकार में बेक किया जाता है: [N]T।
यह एक ऐसा आदिम है जिसका उपयोग शायद ही कभी सीधे एप्लिकेशन कोड में किया जाता है - आप ऐसा करेंगे
लगभग हमेशा स्लाइस (अगला पाठ) के साथ काम करें, जो गतिशील हैं
सरणियों पर दृश्य.
फिर भी, सरणियों को अच्छी तरह से समझना आवश्यक है: गो में सब कुछ निर्मित है उनके ऊपर.
घोषणा और आरंभीकरण
var a [3]int = [3]int{10, 20, 30}
b := [3]int{1, 2, 3} // inference with :=
c := [3]int{} // all zero: [0, 0, 0]
d := [...]int{1, 2, 3, 4} // length inferred = 4किसी सरणी का शून्य मान प्रत्येक के साथ घोषित लंबाई की एक सरणी है तत्व अपने शून्य मान पर:
var nums [5]int // [0 0 0 0 0]अनुक्रमण और len
a := [3]int{10, 20, 30}
fmt.Println(a[0]) // 10
a[1] = 99
fmt.Println(len(a)) // 3सीमा से बाहर पहुंच रनटाइम पैनिक का कारण बनती है (मूक अपरिभाषित नहीं)। जैसे C).
लंबाई प्रकार का हिस्सा है
var a [3]int
var b [4]int
// a = b // ERROR: different types[3]int और [4]int विशिष्ट प्रकार हैं, भले ही दोनों
int. यही कारण है कि सरणियों को शायद ही कभी फ़ंक्शंस में पास किया जाता है: आपको ऐसा करना होगा
पैरामीटर प्रकार में लंबाई को हार्ड-कोड करें।
मूल्य के अनुसार कॉपी करें
स्लाइस (संदर्भ) और मानचित्र (संदर्भ) के विपरीत, सरणियों को कॉपी किया जाता है मूल्य:
a := [3]int{1, 2, 3}
b := a // copy
b[0] = 99
fmt.Println(a[0]) // 1 — a is unchangedकिसी फ़ंक्शन को पास करते समय भी यही बात लागू होती है: फ़ंक्शन इसे प्राप्त करता है स्वयं की प्रति.
सरणियों का उपयोग कब करें?
- संकलन समय पर ज्ञात निश्चित आकार के बफ़र्स (उदाहरण के लिए MD5 के लिए
[16]byte)। - समग्र मानचित्र कुंजियाँ (स्लाइस "तुलनीय" नहीं हैं, सरणियाँ हैं)।
- चरम प्रदर्शन (कोई संकेत नहीं, कैश-अनुकूल)।
99% कोड के लिए: स्लाइस का उपयोग करें।
इसे अजमाएं
a को 10, 20, 30 मानों के साथ 3 पूर्णांकों की एक सरणी के रूप में घोषित करें और इसकी लंबाई प्रिंट करें।
संकेत दिखाएँ
सरणी शाब्दिक: `[3]int{a, b, c}`।
3 प्रयासों के बाद समाधान उपलब्ध है
b को 5 इंट्स (सभी शून्य) की एक सरणी के रूप में घोषित करें और स्थिति 2 को 99 असाइन करें।
संकेत दिखाएँ
`var b [5]int` [0 0 0 0 0] से शुरू होता है।
3 प्रयासों के बाद समाधान उपलब्ध है
क्या [3]int और [4]int एक ही प्रकार के हैं?
var a [3]int
var b [4]int
// a = b ?संक्षिप्त
[N]T: निश्चित लंबाई, प्रकार का भाग।- शून्य मान: प्रत्येक तत्व अपने शून्य मान पर।
[...]int{...}कंपाइलर को लंबाई का अनुमान लगाने देता है।- मूल्य के अनुसार कॉपी करें (आंतरिक कार्यों सहित)।
- सीमा से बाहर = घबराहट, अपरिभाषित नहीं।
- व्यवहार में, स्लाइस का उपयोग करें, जो सरणियों पर दृश्य हैं।