## 條件語句
~~~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… 的邏輯作?等同

* 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

~~~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

* 這三個語句都可以配合標簽使用
* 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 跳出本次循環,進行下一次循環