文章目錄
分支
if語句
一般用法與C語言類似,但是判斷表達式不用加括號
var a int
if a < 4 {
a++
} else if a == 4 {
a--
} else {
a *= 2
}
特殊寫法
在判斷條件表達式前,可以加額外的語句
if b := a * 2; b < 10{
fmt.Println(b)
}
這樣寫的好處是對於塊作用域,變量作用的範圍更小
switch語句
在Go中,switch case
語句的條件比C更加靈活方便,case值不侷限於整數
var a int
switch a{
case 2:
fmt.Println(a)
case 3, 4, 5, 6, 7:
fmt.Println(a)
default:
fmt.Println(a)
}
Go中不需要用break
說明一個分支結束,如果多個分支使用同一處理,可以寫在一個表達式中
還可以將多個if else
的結構寫成swich
語句
var a int
switch {
case a < 10:
fmt.Println(a)
case a > 10 && a < 20, a > 50 && a < 60:
fmt.Println(a)
default:
fmt.Println(a)
}
循環
for循環
Go中沒有while
關鍵字,只有for
幾種常用寫法
var a int
//死循環
for {
a++
}
//判斷條件循環
for a < 10 {
fmt.Println(a)
}
//固定次數循環
for i := 0; i < 10; i++ {
fmt.Println(i)
}
break
和continue
關鍵字功能與其他語言相同
goto
、return
、panic
語句也可以推出循環
for range循環
對可迭代數據的循環,類似於C++的for( : )
,Python的for in
遍歷切片、數組、字符串
單個左值是索引,兩個左值分別是索引和值
for index, value := range s {
fmt.Println(index, value)
}
遍歷map
單個左值是key,兩個分別是key和value
var m = map[string]int{
"hello": 123,
"world": 321,
}
for key := range m {
fmt.Println(key)
}
for key, value := range m {
fmt.Println(key, value)
}
遍歷通道
c := make(chan int)
for msg := range c{
fmt.Println(msg)
}
從通道中不斷獲取數據
跳轉
使用標籤標記代碼塊,再配合使用goto
、break
、continue
進行跳轉
break label
loop:
for {
for{
break loop
}
fmt.Println("outer loop")
}
fmt.Println("outside")
//結果只打印 outside
使用break label,直接跳出兩層循環
continue label
loop:
for {
fmt.Println("outer loop")
for{
continue loop
}
}
//結果一直打印 outer loop
使用continue label,回到外層循環開頭
break和continue後面接label只能接定義在for
、switch
、select
代碼塊前一行的lebel
goto label
goto是無條件跳轉,可以跳轉到任意label,高級語言中不推薦使用
for {
for {
goto exit
}
}
exit:
fmt.Println("outside")
參考資料
《Go語言從入門到進階實戰》第四章