Go با مثال: range روی انواع داخلی

range روی عناصر انواع مختلفی از ساختارهای داده‌ی داخلی پیمایش می‌کند. ببینیم چطور می‌توان از range با برخی از ساختارهای داده‌ای که تا حالا یاد گرفته‌ایم استفاده کرد.

package main
import "fmt"
func main() {

اینجا با range اعداد یک اسلایس را جمع می‌زنیم. آرایه‌ها هم همین‌طور کار می‌کنند.

    nums := []int{2, 3, 4}
    sum := 0
    for _, num := range nums {
        sum += num
    }
    fmt.Println("sum:", sum)

range روی آرایه‌ها و اسلایس‌ها هم اندیس و هم مقدار هر عنصر را می‌دهد. در بالا به اندیس نیازی نداشتیم، پس آن را با شناسهٔ خالی _ نادیده گرفتیم. اما گاهی واقعاً به اندیس‌ها نیاز داریم.

    for i, num := range nums {
        if num == 3 {
            fmt.Println("index:", i)
        }
    }

range روی مپ، جفت‌های کلید/مقدار را پیمایش می‌کند.

    kvs := map[string]string{"a": "apple", "b": "banana"}
    for k, v := range kvs {
        fmt.Printf("%s -> %s\n", k, v)
    }

range می‌تواند فقط روی کلیدهای یک مپ هم پیمایش کند.

    for k := range kvs {
        fmt.Println("key:", k)
    }

range روی رشته‌ها، کد‌پوینت‌های یونیکد را پیمایش می‌کند. مقدار اول، اندیس بایتِ شروع rune و مقدار دوم خود rune است. برای جزئیات بیشتر رشته‌ها و رون‌ها را ببینید.

    for i, c := range "go" {
        fmt.Println(i, c)
    }
}
$ go run range-over-built-in-types.go
sum: 9
index: 1
a -> apple
b -> banana
key: a
key: b
0 103
1 111

مثال بعدی: .