1 if 条件
- 条件语句不需要使用括号将条件包起来
- 无论语句体内有几条语句,花括号 {} 都是必须存在的
- 左花括号 { 必须与 if 或者 else 处于同一行
- 在 if 之后,条件语句之前,可以添加变量初始化语句,使用 ; 间隔
- 在有返回值的函数中,不允许将“最终的” return 语句包含在 if…else… 结构中,否则会编译失败
if a < 5 {return 0} else {return 1}
2 switch 选择
和c++不同,不需要给每个case都手动加入break ```go package main
import “fmt”
func main() { var i = 1 switch i { case 0: fmt.Printf(“0”) case 1: fmt.Printf(“1”) // case匹配后执行完会自动跳出switch case 2: fallthrough // 加上fallthrough, 会继续执行下一个case case 3: fmt.Printf(“3”) case 4, 5, 6: fmt.Printf(“4, 5, 6”) default: fmt.Printf(“Default”) } }
switch 后面的表达式甚至不是必需的```gofunc main() {var Num = 5switch {case 0 <= Num && Num <= 3:fmt.Printf("0-3")case 4 <= Num && Num <= 6:fmt.Printf("4-6")case 7 <= Num && Num <= 9:fmt.Printf("7-9")}}
switch还可用作类型断言
func test(i interface{}) {switch i.(type) {case int:fmt.Printf("Twice %v is %v\n", v, v*2)case string:fmt.Printf("%q is %v bytes long\n", v, len(v))default:fmt.Printf("I don't know about type %T!\n", v)}}
3 for 循环
Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while结构
sum := 0for i := 0; i < 10; i++ {sum += i}
可以看到比较大的一个不同在于 for 后面的条件表达式不需要用圆括号 () 包含起来。
Go语言还进一步考虑到无限循环的场景,让开发者不用写无聊的 for (;;) {} 和 do {} while(1);
sum := 0for {sum++if sum > 100 {break}}
在条件表达式中也支持多重赋值
a := []int{1, 2, 3, 4, 5, 6}for i, j := 0, len(a) – 1; i < j; i, j = i + 1, j – 1 {a[i], a[j] = a[j], a[i]}
Go语言的 for 循环同样支持 continue 和 break 来控制循环,
但是它提供了一个更高级的break ,可以选择中断哪一个循环:
for j := 0; j < 5; j++ {for i := 0; i < 10; i++ {if i > 5 {break JLoop}fmt.Println(i)}}JLoop:// ...
range
nums := []int{2, 3, 4}//在数组上使用range将传入index和值两个变量。for i, num := range nums {if num == 3 {fmt.Println("index:", i)}}
4 goto 跳转
goto 还是会在一些场合下被证明是最合适的。
goto 语句的语义非常简单,就是跳转到本函数内的某个标签
func myfunc() {i := 0HERE:fmt.Println(i)i++if i < 10 {goto HERE}}
5 break
break只会跳出最里层的for, switch, select, 除非后面加上Label
func worker(ctx context.Context) {LOOP:for {fmt.Println("worker")time.Sleep(time.Second)select {case <-ctx.Done(): // 等待上级通知break LOOPdefault:}}wg.Done()}
