Go 語(yǔ)言的循環(huán)語(yǔ)句
在 Go 語(yǔ)言中減少了循環(huán)語(yǔ)句的關(guān)鍵字,僅有一個(gè) for 關(guān)鍵字。但是并沒(méi)有減少其功能,而且它更是兼容了其它語(yǔ)言中的while關(guān)鍵字的用法,甚至更強(qiáng)大。
1. for 循環(huán)語(yǔ)句
1.1 普通用法
在 Go 語(yǔ)言中,for 循環(huán)之后一樣可以跟三個(gè)語(yǔ)句,單次表達(dá)式;條件表達(dá)式;末尾循環(huán)體,但是它不需要使用()
來(lái)包裹這三個(gè)表達(dá)式,寫(xiě)法上更加的簡(jiǎn)潔。同時(shí)它也和其它語(yǔ)言一樣,可以任意省略這三個(gè)表達(dá)式。
代碼示例:
package main
import "fmt"
func main() {
for a := 0; a < 10; a++ {
fmt.Println(a)
}
}
省略單次表達(dá)式代碼示例:
package main
import "fmt"
func main() {
a := 0
for ; a < 10; a++ {//表達(dá)式可以省略,但是;不能省略
fmt.Println(a)
}
}
執(zhí)行結(jié)果:
1.2 代替 while 的用法
在其它大部分語(yǔ)言中 for 循環(huán)中省略單次表達(dá)式和末尾循環(huán)體其實(shí)就和其它語(yǔ)句中的 while 用法一致了。所以在 Go 語(yǔ)言中,直接使用省去單次表達(dá)式和末尾循環(huán)體的 for 循環(huán)語(yǔ)句來(lái)代替 while 的用法,為了簡(jiǎn)便代碼書(shū)寫(xiě),Go 語(yǔ)言中 for 循環(huán)語(yǔ)句在省去單次表達(dá)式和末尾循環(huán)體時(shí),可以不寫(xiě)分號(hào)。
代碼示例:
package main
import "fmt"
func main() {
a := 0
for a < 10 { //和其它語(yǔ)言中的while(a<10)一致
fmt.Println(a)
a++
}
}
執(zhí)行結(jié)果:
2. for 語(yǔ)言中的break 和 continue
在我們的生產(chǎn)環(huán)境中,經(jīng)常需要用到死循環(huán)的場(chǎng)景。所以在 Go 語(yǔ)言中新增了一個(gè) for 關(guān)鍵字死循環(huán)的用法,讓程序員不用寫(xiě)無(wú)聊的 for(;;){}
和do{} while(1)
。同時(shí)可以使用 break 和 continue 來(lái)控制循環(huán)。
Tips:break 和 continue 的邏輯和語(yǔ)法類(lèi)似,故本文只介紹break。
2.1 break跳出單層死循環(huán)
在你想要結(jié)束一個(gè)死循環(huán)的時(shí)候,只需要執(zhí)行一個(gè) break 語(yǔ)句即可。
代碼示例:
package main
import "fmt"
func main() {
a := 0
for { //死循環(huán)的寫(xiě)法就是省略 單次表達(dá)式;條件表達(dá)式;末尾循環(huán)體
fmt.Println(a)
a++
if a >= 10 {
break //跳出死循環(huán)
}
}
}
執(zhí)行結(jié)果:
2.2 break跳出多層死循環(huán)
在其它語(yǔ)言中,你很難去控制跳出循環(huán)的層數(shù),在 Go 語(yǔ)言中提供了一種break LOOP
的寫(xiě)法,可以使循環(huán)跳出到 LOOP 所在的位置。
代碼示例:
package main
import "fmt"
func main() {
a := 0
LOOP:
for {
for {
fmt.Println(a)
a++
if a >= 10 {
break LOOP //跳出循環(huán)至LOOP所在的層級(jí)
}
}
}
}
執(zhí)行結(jié)果:
3. 小結(jié)
本文主要介紹了 for 關(guān)鍵字在 Go 語(yǔ)言的循環(huán)中的用法:
- for 之后的語(yǔ)句不需要使用
()
包裹; break+LOOP
的形式可以一次性跳出多層循環(huán);- for 可以和其它語(yǔ)言中的 while 一樣使用;
- for{…} 的形式是一個(gè)死循環(huán)。