四、流程控制
if
1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func computedValue() int { 8 return 8 9 } 10 11 func main() { 12 //if还有一个强大的地方就是条件判断语句里面允许声明一个变量, 13 //这个变量的作用域只能在该条件逻辑块内,其他地方就不起作用了,如下所示 14 // 计算获取值x,然后根据x返回的大小,判断是否大于10。 15 if x := computedValue(); x > 10 { 16 fmt.Println("x is greater than 10") 17 } else if x == 8 { 18 fmt.Println("x is 11") 19 } else { 20 fmt.Println("x is less than 10 and not 8") 21 } 22 }
结果:x is 11
goto
Go有goto语句——请明智地使用它。用goto跳转到必须在当前函数内定义的标签。例如假设这样一个循环:
1 func myFunc() { 2 i := 0 3 Here: //这行的第一个词,以冒号结束作为标签 4 println(i) 5 i++ 6 goto Here //跳转到Here去 7 }
结果:1到无限
for
1 package main 2 3 import "fmt" 4 5 func main() { 6 for index := 10; index > 0; index-- { 7 if index == 5 { 8 break // 或者continue 9 } 10 fmt.Println(index) 11 } 12 // break打印出来10、9、8、7、6 13 // continue打印出来10、9、8、7、6、4、3、2、1 14 }
while的功能。
1 sum := 1 2 for sum < 1000 { 3 sum += sum 4 }
range
是个迭代器,它可以在slice,array,string,map和channel,从它循环的内容中返回一个键值对。
1 package main 2 3 import "fmt" 4 5 func main() { 6 //创建一个字符串的slice 7 List := []string{"a", "b", "c", "d", "e", "f"} 8 for k, v := range List { 9 //range将返回int类型的序号 10 fmt.Println("key:", k, "value:", v) 11 } 12 //也可以在字符串上直接使用range 13 for pos, char := range "a%x$" { 14 fmt.Printf("位置:%d 字符:%c\n", pos, char) 15 } 16 }
结果:
key: 0 value: a
key: 1 value: b
key: 2 value: c
key: 3 value: d
key: 4 value: e
key: 5 value: f
位置:0 字符:a
位置:1 字符:%
位置:2 字符:x
位置:3 字符:$
switch
1 package main 2 3 import "fmt" 4 5 func main() { 6 //Go里面switch默认相当于每个case最后带有break 7 i := 2 8 switch i { 9 case 1: 10 fmt.Println("i is equal to 1") 11 case 2, 3, 4: 12 fmt.Println("i is equal to 2, 3 or 4") 13 //使用fallthrough强制执行后面的case代码 14 fallthrough 15 case 10: 16 fmt.Println("i is equal to 10") 17 default: 18 fmt.Println("All I know is that i is an integer") 19 } 20 }
浙公网安备 33010602011771号