"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गो स्लाइसिंग में मुझे स्लाइस बाउंड आउट ऑफ़ रेंज त्रुटि क्यों मिलती है?

गो स्लाइसिंग में मुझे स्लाइस बाउंड आउट ऑफ़ रेंज त्रुटि क्यों मिलती है?

2024-12-21 को प्रकाशित
ब्राउज़ करें:952

Why Do I Get a Slice Bounds Out of Range Error in Go Slicing?

स्लाइसिंग: गो में आउट-ऑफ-बाउंड त्रुटि

गो में, स्लाइसिंग में एक नया बनाने के लिए मौजूदा स्लाइस के एक हिस्से को निकालना शामिल है टुकड़ा। जब स्लाइसिंग के दौरान एक आउट-ऑफ-बाउंड त्रुटि होती है, तो यह इंगित करता है कि निर्दिष्ट सीमा स्रोत स्लाइस के लिए मान्य सूचकांक सीमाओं से अधिक है।

निम्न कोड स्निपेट पर विचार करें:

a := make([]int, 5)
printSlice("a", a)
b := make([]int, 0, 5)
printSlice("b", b)
c := b[1:]
printSlice("c", c)

}

func printSlice(s string, x []int) {

fmt.Printf("%s len=%d cap=%d %v\n",
    s, len(x), cap(x), x)

}

इस कोड को चलाने से एक आउट-ऑफ-बाउंड त्रुटि उत्पन्न होती है:

a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
panic: runtime error: slice bounds out of range

goroutine 1 [running]:
main.main()
   /private/var/folders/q_/53gv6r4s0y5f50v9p26qhs3h00911v/T/compile117.go:10  0x150

यह त्रुटि क्यों होती है यह समझने के लिए, हमें गो में स्लाइसिंग को नियंत्रित करने वाले नियमों को समझने की आवश्यकता है।

टुकड़े करना नियम

किसी स्लाइस या सरणी को काटते समय, निर्दिष्ट सूचकांक या तो स्पष्ट या अंतर्निहित हो सकते हैं। यदि कोई सूचकांक स्पष्ट रूप से प्रदान नहीं किया गया है, तो यह एक विशिष्ट मान पर डिफ़ॉल्ट होता है। स्लाइस के लिए:

  • A गायब निचली सीमा डिफ़ॉल्ट रूप से 0.
  • A लापता ऊपरी सीमा डिफ़ॉल्ट len(slice) (कैप(स्लाइस) नहीं) है।

दिए गए कोड में, त्रुटि उत्पन्न होती है क्योंकि सी स्लाइस बनाने के लिए स्लाइसिंग अभिव्यक्ति है:

c := b[1:]

इसका मतलब है कि निचली सीमा (1) स्पष्ट रूप से निर्दिष्ट है, लेकिन ऊपरी सीमा नहीं है। इसलिए, यह डिफ़ॉल्ट रूप से len(b) है, जो 0 है। हालांकि, निर्दिष्ट निचली सीमा (1) ऊपरी सीमा (0) से के बराबर या उससे कम होनी चाहिए। यह शर्त पूरी नहीं हुई है, जिसके परिणामस्वरूप सीमा से बाहर त्रुटि हुई है।

इस त्रुटि से बचने के लिए, आप निचली और ऊपरी दोनों सीमाओं को स्पष्ट रूप से निर्दिष्ट कर सकते हैं। उदाहरण के लिए, b स्लाइस से केवल दूसरा तत्व निकालने के लिए, आप लिखेंगे:

c := b[1:2] // c len=1 cap=4 [0]

वैकल्पिक रूप से, यदि आप दूसरे तत्व से शुरू करके संपूर्ण बी स्लाइस निकालना चाहते हैं, तो आप इसका उपयोग कर सकते हैं:

c := b[1:cap(b)] // c len=4 cap=4 [0 0 0 0]
नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3