這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
range函數是個神奇而有趣的內建函數,你可以使用它來遍曆數組,切片和字典。
當用於遍曆數組和切片的時候,range函數返回索引和元素;
當用於遍曆字典的時候,range函數返回字典的鍵和值。
package mainimport ( "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函數用來遍曆字串時,返回Unicode代碼點。 // 第一個傳回值是每個字元的起始位元組的索引,第二個是字元代碼點, // 因為Go的字串是由位元組組成的,多個位元組組成一個rune類型字元。 for i, c := range "go" { fmt.Println(i, c) }}
123456789101112131415161718192021222324252627282930313233343536373839404142 |
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函數用來遍曆字串時,返回Unicode代碼點。 // 第一個傳回值是每個字元的起始位元組的索引,第二個是字元代碼點, // 因為Go的字串是由位元組組成的,多個位元組組成一個rune類型字元。 for i, c := range "go" { fmt.Println(i, c) } } |
輸出結果為:
/usr/local/go/bin/go run /Users/xiequan/mygo/src/golangdemo/main.gosum: 9index: 1a -> appleb -> banana0 1031 111
1234567 |
/usr/local/go/bin/go run /Users/xiequan/mygo/src/golangdemo/main.gosum: 9index: 1a -> appleb -> banana0 1031 111 |
Go range函數 用法