मुझे स्वीकृत उत्तर समाधान के साथ एक त्रुटि सीमा से बाहर सूचकांक मिल रहा है। कारण: जब रेंज शुरू होती है, तो यह एक-एक करके इट्रेट वैल्यू नहीं होती है, यह इंडेक्स द्वारा इटरेट होती है। यदि आप एक स्लाइस को संशोधित करते हैं, जबकि यह सीमा में है, तो यह कुछ समस्या उत्पन्न करेगा।
पुराना उत्तर:
chars := []string{"a", "a", "b"}
for i, v := range chars {
fmt.Printf("%+v, %d, %s\n", chars, i, v)
if v == "a" {
chars = append(chars[:i], chars[i+1:]...)
}
}
fmt.Printf("%+v", chars)
अपेक्षित होना :
[a a b], 0, a
[a b], 0, a
[b], 0, b
Result: [b]
वास्तविक:
// Autual
[a a b], 0, a
[a b], 1, b
[a b], 2, b
Result: [a b]
सही तरीका (समाधान):
chars := []string{"a", "a", "b"}
for i := 0; i < len(chars); i++ {
if chars[i] == "a" {
chars = append(chars[:i], chars[i+1:]...)
i-- // form the remove item index to start iterate next item
}
}
fmt.Printf("%+v", chars)
स्रोत: https://dinolai.com/notes/golang/golang-delete-slice-item-in-range-problem.html