不同形式的迴圈
使用一個變數的簡單形式:
for i := 0; i < 10; i++ {
fmt.Print(i, " ")
}
使用兩個變數(或更多):
for i, j := 0, 0; i < 5 && j < 10; i, j = i+1, j+2 {
fmt.Println(i, j)
}
不使用初始化語句:
i := 0
for ; i < 10; i++ {
fmt.Print(i, " ")
}
沒有測試表示式:
for i := 1; ; i++ {
if i&1 == 1 {
continue
}
if i == 22 {
break
}
fmt.Print(i, " ")
}
沒有增量表示式:
for i := 0; i < 10; {
fmt.Print(i, " ")
i++
}
當刪除所有三個初始化,測試和增量表示式時,迴圈變為無限:
i := 0
for {
fmt.Print(i, " ")
i++
if i == 10 {
break
}
}
這是一個無限迴圈的例子,計數器初始化為零:
for i := 0; ; {
fmt.Print(i, " ")
if i == 9 {
break
}
i++
}
當只使用測試表示式時(就像典型的 while 迴圈一樣):
i := 0
for i < 10 {
fmt.Print(i, " ")
i++
}
僅使用增量表示式:
i := 0
for ; ; i++ {
fmt.Print(i, " ")
if i == 9 {
break
}
}
使用索引和值迭代一系列值:
ary := [5]int{0, 1, 2, 3, 4}
for index, value := range ary {
fmt.Println("ary[", index, "] =", value)
}
使用索引迭代範圍:
for index := range ary {
fmt.Println("ary[", index, "] =", ary[index])
}
使用索引迭代範圍:
for index, _ := range ary {
fmt.Println("ary[", index, "] =", ary[index])
}
僅使用值迭代範圍:
for _, value := range ary {
fmt.Print(value, " ")
}
使用地圖的鍵和值迭代範圍(可能不是按順序):
mp := map[string]int{"One": 1, "Two": 2, "Three": 3}
for key, value := range mp {
fmt.Println("map[", key, "] =", value)
}
使用地圖鍵(可能不按順序)迭代範圍:
for key := range mp {
fmt.Print(key, " ") //One Two Three
}
使用地圖鍵(可能不按順序)迭代範圍:
for key, _ := range mp {
fmt.Print(key, " ") //One Two Three
}
僅使用 map 的值迭代一個範圍(可能不是按順序):
for _, value := range mp {
fmt.Print(value, " ") //2 3 1
}
迭代通道範圍(如果通道關閉則退出):
ch := make(chan int, 10)
for i := 0; i < 10; i++ {
ch <- i
}
close(ch)
for i := range ch {
fmt.Print(i, " ")
}
迭代字串的範圍(給出 Unicode 程式碼點):
utf8str := "B = \u00b5H" //B = µH
for _, r := range utf8str {
fmt.Print(r, " ") //66 32 61 32 181 72
}
fmt.Println()
for _, v := range []byte(utf8str) {
fmt.Print(v, " ") //66 32 61 32 194 181 72
}
fmt.Println(len(utf8str)) //7
如你所見,utf8str
有 6 個符文(Unicode 程式碼點)和 7 個位元組。