Golang基礎筆記六之流程控制
本文首發于公眾號:Hunter后端
原文鏈接:Golang基礎筆記六之流程控制
本篇筆記介紹 Golang 里流程控制相關的一些語法,以下是本篇筆記目錄:
- 條件語句
- 循環語句
1、條件語句
1. if-else 語句
if-else 語句的基本語法如下:
if condition {
}else if condition {
}else {
}
下面是一個示例:
num := 10
if num <= 5 {
fmt.Println("num 小于等于 5")
} else if num > 5 && num <= 10 {
fmt.Println("num 大于 5 小于等于 10")
} else {
fmt.Println("num 大于 10")
}
if 語句中,還可以包含一個初始化語句,用于條件判斷之前執行一些操作:
if num := 10; num <= 5 {
fmt.Println("num 小于等于 5")
} else if num > 5 && num <= 10 {
fmt.Println("num 大于 5 小于等于 10")
} else {
fmt.Println("num 大于 10")
}
注意:這里 num 這個變量的作用域僅限于 if-else 塊。
這里的 if-else 語句,除了最開始的 if 語句是必需的外,后面的 else-if 和 else 模塊都是可選的。
2. switch 語句
switch 語句有兩種形式,一種是表達式 switch,一種是類型 switch。
1. 表達式 switch
下面這個示例是基于表達式的值來執行不同的模塊:
day := 4
switch day {
case 1, 2, 3, 4, 5:
fmt.Println("工作日")
case 6:
fmt.Println("星期六")
case 7:
fmt.Println("星期日")
default:
fmt.Println("非法星期數")
}
下面這個示例是無表達式的,其效果等同于 if-else 語句:
score := 80
switch {
case score >= 90:
fmt.Println("優秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("一般")
default:
fmt.Println("差勁")
}
2. 類型 switch
類型 switch 用于根據變量的類型來執行不同的代碼塊,通常用于處理接口類型的變量,接口相關的內容后面再介紹,這里先直接使用,使用方式和前面的 switch 類似:
func printType(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("%v 是整數類型\n", v)
case string:
fmt.Printf("%v 是字符串類型\n", v)
default:
fmt.Printf("%v 是其他類型\n", v)
}
}
func main() {
num := 10
str := "hello"
printType(num)
printType(str)
}
2、循環語句
循環語句就是 for 循環操作了,這里介紹幾種類型:
1. for 循環
for 循環的用法和其他語言的類似,比如從 0 循環到 4:
for i := 0; i < 5; i++ {
fmt.Printf("i:%v\n", i)
}
2. for-range 循環
for-range 循環可用于數組、切片、字符串、map 等可迭代對象,循環的參數又兩個,分別是索引和對應的元素。
這里逐個介紹其示例:
1) 數組/切片
數組或者切片的示例如下:
s := []string{"a", "b", "c"}
for index, value := range s {
fmt.Printf("index: %v, value: %v\n", index, value)
}
前面的 index 是索引下標,value 是下標對應的值。
如果不需要 index 或者 value,直接置為 "_" 即可:
s := []string{"a", "b", "c"}
for _, value := range s {
fmt.Printf("value: %v\n", value)
}
2) 字符串
對字符串是用 for-range 返回的索引是字節索引:
s := "hello world"
for index, char := range s {
fmt.Printf("index:%d, char:%c\n", index, char)
}
而如果字符串中包含中文,Go 能夠將其自動解碼,且返回中文字符開始的字節索引位置:
s2 := "hello 世界"
for index, char := range s2 {
fmt.Printf("index:%d, char:%c\n", index, char)
}
3) map
對 map 使用 for-range 操作會迭代其 key-value:
m := map[string]int{
"a": 1,
"b": 4,
"c": 2,
}
for k, v := range m {
fmt.Printf("k:%s, v:%d\n", k, v)
}
3. 無限循環
對于前面的 for 循環,如果我們不設置任何條件,就可以實現一個無限循環,可以在內部通過 continue 和 break 來控制進入下一次循環或者退出循環。
以下是一個示例:
i := 0
for {
i++
if i%2 == 0 {
fmt.Println("i 是偶數", i)
continue
}
if i == 5 {
fmt.Println("i = 5, 退出循環")
break
}
}

浙公網安備 33010602011771號