## 条件语句
~~~go
if a > b {
} else {
}
~~~
### 与其他主要编程语⾔的差异
1. condition 表达式结果必须为布尔值
2. ⽀持变量赋值:
```go
if var declaration; condition {
}
```
## 选择语句 switch
与其他主要编程语⾔的差异
1. 条件表达式不限制为常量或者整数;
2. 单个 case 中,可以出现多个结果选项, 使⽤逗号分隔;
3. 与 C 语⾔等规则相反, Go 语⾔不需要⽤break来明确退出⼀个 case;
4. 可以不设定 switch 之后的条件表达式,在此种情况下,整个 switch 结
构与多个 if…else… 的逻辑作⽤等同
![](https://box.kancloud.cn/b17890a6ed514faddbf5a9a134dad186_351x491.png)
* switch 语句基于不同的条件执行不同的动作,每个case分支都是唯一的
* switch 语句从上到下逐一测试,直至匹配为止;如果希望继续执行下一个case,需要使用**fallthrough**
* switch 语句还可用于type-switch来判断某个interface中实际存储的变量类型
* 支持初始化表达式,右侧需要跟分号
~~~go
switch var {
case condition1:
code block1
case condition2:
code block2
default:
code block3
}
~~~
### 判断变量类型
~~~
package main
import "fmt"
func main() {
var test interface{}
test = true
switch test.(type) {
case int:
fmt.Print("整型")
case string:
fmt.Print("字符串")
default:
fmt.Print("都不是")
}
}
~~~
### switch 中含赋值语句和条件
```go
switch os := runtime.GOOS; os {
case "darwin":
fmt.Println("OS X.”)
//break
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.", os)
}
```
### 实现多个 if
```go
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")
}
```
## 循环语句 for
![](https://gitee.com/echohiyang/markdown-images/raw/master/BsJaPi.jpg)
~~~go
# 方式1 无限循环
for true {
}
for {
}
~~~
~~~
# 方式2 条件循环
for init;condition;increase {
}
~~~
~~~
# 方式3 遍历数组
package main
import "fmt"
func main() {
a := []string{"a","b","c"}
for key,val := range a {
fmt.Print(key)
fmt.Print(val)
fmt.Print("\n")
}
}
~~~
~~~
# 方式4 while 条件循环
n := 0
for n < 5 {
n++
fmt.Println(n)
}
~~~
## 循环体内的变量每次都是重新生成的
~~~
package main
import "fmt"
func main() {
for i := 1; i <= 3; i++ {
v := 1
fmt.Println(&v)
}
}
## result
0xc420014060
0xc420014068
0xc420014080
}
~~~
## 跳转语句 goto break continue
![](https://gitee.com/echohiyang/markdown-images/raw/master/nmtfkC.jpg)
* 这三个语句都可以配合标签使用
* break和continue配合标签可以跳出多层循环
* goto是调整位置,与其他两个语句配合标签的结果并不相同
### goto 跳转到指定语句
~~~go
goto One
fmt.Print("middle code")
One:
fmt.Print("last code")
~~~
### break 跳出本层循环
~~~
package main
import "fmt"
func main(){
LABLE1:
for {
for i := 1; i <= 10; i++ {
if i < 3 {
fmt.Println(i)
} else {
break LABLE1
}
}
}
fmt.Println("break")
}
~~~
### continue 跳出本次循环,进行下一次循环