range
ব্যবহার করে কোনো স্লাইস, ম্যাপ বা চ্যানেল iterate করা যায়। যখন স্লাইস iterate করার জন্য range
ব্যবহার করা হয় তখন প্রতিটি iterate এর জন্য range
দুটো ভ্যালু রিটার্ন করে: ইনডেক্স এবং ঐ ইনডেক্সের ভ্যালুর কপি। একটা উদাহরণ দেখা যাক:
package mainimport "fmt"var doubles = []int{0, 2, 4, 6, 8, 10}func main() {for i, v := range doubles {fmt.Println("Double of", i, "is", v)}}
এখানে doubles
অ্যারেটি আইটারেট করার জন্য range
ব্যবহার করা হয়েছে। প্রতিটি iteration এ i
আর v
তে থাকবে যথাক্রমে ইনডেক্স আর ওই ইনডেক্সের ভ্যালুর কপি। প্রোগ্রাম রান করলে এই আউটপুট পাওয়া যাবে:
Double of 0 is 0Double of 1 is 2Double of 2 is 4Double of 3 is 6Double of 4 is 8Double of 5 is 10
যদি ইনডেক্স বা ভ্যালুর দরকার না পড়ে তবে সেটা _
ব্যবহার করে স্কিপ করা যায়। আবার শুধু ইনডেক্স চাইলে দ্বিতীয় ভ্যারিয়েবল লিখার প্রয়োজন পড়ে না। উদাহরণ দেখি:
package mainimport "fmt"func main() {// ইন্টিজারের স্লাইস তৈরি করলামdoubles := make([]int, 6)// শুধু ইনডেক্স নিয়ে সেগুলোর সাথে দুই গুণ করছিfor i := range doubles {doubles[i] = 2 * i}// এবার স্লাইসটির ভ্যালুগুলো দেখাচ্ছি, ইনডেক্স বাদ দেয়ার জন্য `_` ব্যবহার করছিfor _, value := range doubles {fmt.Println(value)}}
আউটপুট:
0246810