Go笔记(三):循环语句
1、for循环
与Java语言不同,go语言中只有for循环,没有while和do while。for表达式无需加括号,语法如下:
for 初始语句;条件表达式;结束语句 { 循环体语句 }
示例代码如下:
1 package main 2 3 import "fmt" 4 5 /** 6 循环 7 */ 8 func for01() { 9 for i := 1; i < 10; i++ { 10 fmt.Printf("for01 ==> i: %v\n", i) 11 } 12 } 13 // 初始条件可省略 14 func for02() { 15 i := 1 16 for ; i < 10; i++ { 17 fmt.Printf("for02 ==> i: %v\n", i) 18 } 19 } 20 // 初始结束条件都可省略 21 func for03() { 22 i := 1 23 for i < 10 { 24 fmt.Printf("for03 ==> i: %v\n", i) 25 i++ 26 } 27 } 28 // 永真循环 29 func for04() { 30 for { 31 fmt.Println("for04 ==> 一直在循环") 32 } 33 } 34 35 func main() { 36 for01() 37 for02() 38 for03() 39 //for04() 40 }
2、for range循环
Go中可以使用for range遍历数组、切片、字符串、map及channel(通道)。遍历数组会返回索引和值。
1 package main 2 3 import "fmt" 4 5 // 遍历数组,带有索引值的for range 6 func forrange01() { 7 var arr = [...]int{1, 3, 5, 7, 9} 8 // i 为索引下标;v 为元素值 9 for i, v := range arr { 10 fmt.Printf("i = %v ; v = %v\n", i, v) 11 } 12 } 13 // 遍历数组,不用索引值,用匿名变量表示索引值的for range 14 func forrange02() { 15 var arr = [...]int{1, 3, 5, 7, 9} 16 for _, v := range arr { 17 fmt.Printf("v: %v\n", v) 18 } 19 } 20 21 func main() { 22 forrange01() 23 forrange02() 24 }
3、break关键字
break可以结束for循环的代码块,示例代码如下:
1 package main 2 3 import "fmt" 4 5 // break关键字 6 func break01() { 7 for i := 1; i < 10; i++ { 8 if i == 5 { 9 break 10 } 11 fmt.Printf("break01 ==> i: %v\n", i) 12 } 13 fmt.Println("break01 ==> over for") 14 } 15 // 跳出循环到指定位置 16 func break02() { 17 LABEL: 18 for i := 1; i < 10; i++ { 19 if i == 3 { 20 break LABEL 21 } 22 fmt.Printf("break02 ==> i: %v\n", i) 23 } 24 fmt.Println("break02 ==> over for") 25 } 26 27 func main() { 28 break01() 29 break02() 30 }
4、continue关键字
continue只能用在循环中,可以终止本次循环,进行下一次循环;continue语句后添加标签时,表示开始标签对应的循环。示例代码如下:
1 package main 2 3 import "fmt" 4 5 // 输出偶数 continue -> 结束本次循环,继续下一次循环 6 func continue01() { 7 for i := 1; i < 10; i++ { 8 if i%2 != 0 { 9 continue 10 } 11 fmt.Printf("continue01 ==> i: %v是偶数\n", i) 12 } 13 } 14 // continue到指定标签 15 func continue02() { 16 for i := 1; i < 3; i++ { 17 LABEL: 18 for j := 1; j < 3; j++ { 19 if i == 2 && j == 3 { 20 continue LABEL 21 } 22 fmt.Printf("continue02 ==> i: %v, j: %v\n", i, j) 23 } 24 } 25 } 26 27 func main() { 28 continue01() 29 continue02() 30 }