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 后面的表达式甚至不是必需的
```go
func main() {
var Num = 5
switch {
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 := 0
for i := 0; i < 10; i++ {
sum += i
}
可以看到比较大的一个不同在于 for 后面的条件表达式不需要用圆括号 () 包含起来。
Go语言还进一步考虑到无限循环的场景,让开发者不用写无聊的 for (;;) {} 和 do {} while(1);
sum := 0
for {
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 := 0
HERE:
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 LOOP
default:
}
}
wg.Done()
}