目录
if
条件满足,执行相应逻辑块里面的代码,条件不满足,不执行逻辑块代码,继续向下执行
语法
if 条件表达式 {
逻辑体
}
示例1
if 3 > 5 {
fmt.Println("进来了。。。")
}
说明
- 条件表达式成立,会执行逻辑体。
- 条件表达式不需要加 () 括号。
- "{" 必须紧跟在条件表达式后面,不能另起一行。
示例2
if a, b, c := 1, 2, 3; a > b || b < c {
fmt.Println("进来了。。。")
}
说明
- 条件表达式中可以含有变量或常量
- if语句中允许包含仅一个分号,在分号前初始化一些局部变量(即只在if块内可见)
if-else if-else
- 条件表达式满足执行逻辑块里面的代码,剩下的 if else if else 块中的代码不执行。如果条件都不满足,执行最后一个else块中的逻辑代码。
- else if 可以有0个或多个连续的
- else 可以有0个或一个在最后
语法
if 条件表达式 {
逻辑块
} else if 条件表达式 {
逻辑块
} else if 条件表达式 {
逻辑块
} else {
逻辑块
}
示例
var a = 10
if a == 1 {
fmt.Println("a=1")
} else if a == 2 {
fmt.Println("a=2")
} else if a == 3 {
fmt.Println("a=3")
} else {
fmt.Println(a)
}
if 的嵌套
var a, b = 10, 20
if a == 10 {
if a > b {
fmt.Println("a>b")
} else {
fmt.Println("a<b")
}
} else {
fmt.Println(a)
}
switch
满足条件是执行对应的逻辑块代码,都不满足时执行default逻辑块里的代码
语法
switch 变量 {
case 值1:
逻辑块
fallthrough
case 值2:
逻辑块
default:
逻辑块
}
示例
var a = 10
switch a {
case 1:
fmt.Println("a=1")
case 2:
fmt.Println("a=2")
default:
fmt.Println(a)
}
说明
- case 块可以有0个或多个连续的
- default 块可以有0个或一个在最后
- switch-case-default 可以模拟 if-else if-else,但只能实现相等判断
- switch和case后面可以跟常量、变量或函数表达式
- case后面可以跟多个值,只要有一个值满足就行
- switch后面如果是空的,那么case可以写条件表达式
- fallthrough,case块中如果带了fallthrough,则执行完case代码后还会执行下一个case块代码
swithc_type
var num interface{} = "10"
switch num.(type) {
case int:
fmt.Println("int")
case float32:
fmt.Println("float32")
case float64:
fmt.Println("float64")
case byte, string:
fmt.Printf("%v \n", num)
}
for
循环语句
语法
for 初始化局部变量; 条件表达式; 增减操作 {
代码块
}
示例
for i := 0; i < 10; i++ {
fmt.Println(i)
}
说明
- 执行顺序,先执行局部变量初始化,在执行条件表达式,如果满足,执行代码块,再执行增减操作。再执行条件表达式,依次循环。
- for变体写法:初始化变量可以放在for上面,增减操作可以放在for代码块中,只有条件判断跟在for后面时,前后的分号可以不要。也可以for后面跟{括号写成死循环,for{代码块}
for range
循环集合,for range拿到的是数据的拷贝
- 遍历数组或切片
- for i, value := range arr
- 遍历string
- for i, value := range str
- 遍历map,go不保证遍历的顺序
- for key, value := range map
- 遍历channel,遍历前要先close
- for value:= range channel
break、continue
break:退出for循环,且for循环中break下面的代码不再执行。
continue:跳出循环,continue下面的代码不再执行。进行下一轮循环
goto与label
语法
标记:
代码块
goto 标记
示例1
label:
fmt.Println("a")
goto label
说明
从上到下执行,执行到 goto label 的时候,跳转到上面 label 的地方开始重新执行,进入无限循环中
示例2
if true {
goto L1
} else {
goto L2
}
fmt.Println("我会被跳过")
L1:
fmt.Println("L1")
L2:
fmt.Println("L2")
fmt.Println("我会执行")
说明
- label 也可以写在 goto下面。
- 执行到 goto 代码的时候,直接跳转到 标记的地方,中间的代码被跳过不会执行。
- label 指定的只是某一行代码,并不是一个代码块,所以 goto L1执行后,会接着执行goto L2和后面的代码。
示例3
for i := 0; i < 10; i++ {
fmt.Println("i")
for j := 0; j < 10; j++ {
goto L1
}
}
L1:
fmt.Println("最外层")
说明
goto label 结合可以跳转到最外层的for循环
全套教程地址:Golang全套教程