循環在全部語句最基礎的結構,在Go
語言中也不例外,可是在Go
語言中,只有一種循環結果,沒有 do-while
結構的循環,while
結構的循環被 for {}
代替。
在Go
語言中,for
循環也因些變的更加的靈活,更加的好用。code
func main() { i := 1 for i < 5 { i++ fmt.Println("i = ", i) } }
Go
語言中,if
語句,for
語句,switch
語句後面的條件判斷都不用加 ( ) ,直接寫判斷條件就能夠,這也是Go
語言簡單的一點。排序
沒有初始化的意思就是初始化定義在 for
循環外面,而且處境語句也不和條件判斷在同一行。作用域
func main() { for i := 10; i < 0; i-- { fmt.Println("i = ", i) } }
和無初始化的 for
循環相比,這一種更加的簡潔,可是這兩種結構也說不出誰好誰壞,都有本身的特定場景,好比無初始化的,它其中的變量 i 就能夠在其它地方使用,可是有初始化的這個 for
循環不行,它只能在循環的做用域內使用。it
func main() { i := 0 for { fmt.Println("i = ", i) if i == 10{ break // 跳出循環結構 } i++ } }
在使用無限循環時,必需要注意的一點就是,必定要有結束條件,否則在運行的時候,必定會報錯。class
無限循環就是 for
沒有任務條件,直接運行。基礎
嵌套循環就是在一個 for
循環裏面,嵌套別一個 for
循環,最經典的就是 冒泡排序 了。變量
func main() { arr := []int{5, 8, 9, 6, 7, 4, 3, 0, 2, 1} // 冒泡排序 for i := 0; i < len(arr)-1; i++ { for j := 0; j < len(arr)-i-1; j++ { if arr[j] > arr[j+1] { // 大於號,正序排列,小於號,倒序排例 arr[j], arr[j+1] = arr[j+1], arr[j] } } } fmt.Println(arr) }
func main() { arr := []int{5, 8, 9, 6, 7, 4, 3, 0, 2, 1} for k, v := range arr { fmt.Printf("下標爲:%d,值爲:%d\n", k, v) } //下標爲:0,值爲:5 //下標爲:1,值爲:8 //下標爲:2,值爲:9 //下標爲:3,值爲:6 //下標爲:4,值爲:7 //下標爲:5,值爲:4 //下標爲:6,值爲:3 //下標爲:7,值爲:0 //下標爲:8,值爲:2 //下標爲:9,值爲:1 }
for-range
循環就是一種Go
語言的語法糖,它其實和普通的 for
循環同樣,就是方便了使用纔出現的。循環
循環控制語句就是在循環中,控制循環的執行順序,執行過程。最經常使用的有兩個 break
、continue
。語法
break
的做用是跳出本層循環,好比,在嵌套循環中,有兩層循環,內層只有一個 break
語句,那麼執行後,只會結束一層循環,剩下的繼續執行。語言
func main() { for i := 0; i < 5; i++ { for j := 0; j < 5; j++ { if j == 3 { break // 跳出本層循環,進入到外層循環 } fmt.Println("j = ", j) } } }
continue
的做用是跳過本次循環,只要遇到 continue
後,它以後的全部語句都不執行了,循環體內直接執行完,執行下一次循環。
func main() { for i := 0; i < 5; i++ { if i == 3 { continue } fmt.Println("i = ", i) } // 結果: 1,2,4 }
在上面的例子中,當知足 if
條件時,直接跳過執行這一次的打印,直接開始了下一次的打印。
細節決定成敗!
我的愚見,若有不對,懇請扶正!