Go相關的資料,博主已幫大家整理好,如有需要可加v:codeMaster001,免費贈送
回圈陳述句用于重復執行代碼塊,
for 是 Go 中唯一可用的回圈,Go 沒有在其他語言(例如 C)中存在的while 或 do while 回圈,
for 回圈語法
for initialisation; condition; post {
}
復制代碼
初始化陳述句將僅執行一次,回圈初始化后,將檢查條件,如果條件的計算結果為 true,則將執行 { } 內部的回圈主體,然后執行 post 陳述句, 每次回圈成功迭代后,將執行 post 陳述句,執行 post 陳述句后,將重新檢查條件,如果為 true,則回圈將繼續執行,否則 for 回圈終止,
Go 中的 for 回圈的三個部分,即初始化,條件和發布都是可選的,讓我們看一個示例,以更好地理解回圈,
示例
讓我們撰寫一個程式,該程式使用 for 回圈列印從 1 到 10 的所有數字,
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
fmt.Printf(" %d",i)
}
}
復制代碼
Run in playground
在上面的程式中,i 被初始化為 1,條件陳述句將檢查 i <= 10,如果條件為真,則輸出 i 的值,否則回圈終止,在每次迭代結束時,post 陳述句將 i 遞增 1,一旦 i 大于 10,則回圈終止,
上面的程式將列印 1 2 3 4 5 6 7 8 9 10
在 for 回圈中宣告的變數僅在回圈范圍內可用,因此,無法在主體外部進行回圈訪問 i,
break
break 陳述句用于在完成正常執行之前突然終止 for 回圈,并將控制權移至 for 回圈之后的代碼行,
讓我們撰寫一個使用 break 列印從 1 到 5 的數字的程式,
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
if i > 5 {
break // 如果 i 大于 5,回圈將終止
}
fmt.Printf("%d ", i)
}
fmt.Printf("\nline after for loop")
}
復制代碼
Run in playground
在上面的程式中,在每次迭代程序中都會檢查 i 值,如果 i 大于 5,則執行 break 并終止回圈,然后在 for 回圈之后執行 print 陳述句,上面的程式將輸出:
1 2 3 4 5
line after for loop
復制代碼
continue
continue 陳述句用于跳過 for 回圈的當前迭代,在 continue 陳述句之后的 for 回圈中存在的所有代碼將不會針對當前迭代執行,回圈將繼續進行下一個迭代,
讓我們撰寫一個程式,使用 continue 列印從 1 到 10 的所有奇數,
package main
import (
"fmt"
)
func main() {
for i := 1; i <= 10; i++ {
if i%2 == 0 {
continue
}
fmt.Printf("%d ", i)
}
}
復制代碼
Run in playground
在上面的程式中,if i%2 == 0 行檢查將 i 除以 2 的提示是否為 0,如果為零,則數字為偶數,并執行 continue 陳述句,并且控制移至 回圈的下一次迭代, 因此,continue 之后的 print 陳述句將不會被呼叫,并且回圈會進行到下一個迭代,上面程式的輸出是 1 3 5 7 9,
嵌套回圈
一個內部有另一個 for 回圈的 for 回圈稱為嵌套 for 回圈,讓我們通過撰寫一個列印以下序列的程式來了解嵌套的 for 回圈,
*
**
***
****
*****
復制代碼
下面的程式使用嵌套的 for 回圈來列印序列,第 8 行中的變數 n 存盤序列中的行數,在我們的例子中是 5,外部 for 回圈將 i 從 0 迭代到 4,內部 for 回圈將 j 從 0 迭代到 i 的當前值, 內回圈為每次迭代列印“ *”,而外回圈在每次迭代結束時列印新行, 運行該程式,你會看到序列列印為輸出,
package main
import (
"fmt"
)
func main() {
n := 5
for i := 0; i < n; i++ {
for j := 0; j <= i; j++ {
fmt.Print("*")
}
fmt.Println()
}
}
復制代碼
Run in playground
標簽
標簽可用于從內部 for 回圈中斷外部回圈,讓我們通過一個簡單的例子來理解我的意思,
package main
import (
"fmt"
)
func main() {
for i := 0; i < 3; i++ {
for j := 1; j < 4; j++ {
fmt.Printf("i = %d , j = %d\n", i, j)
}
}
}
復制代碼
Run in playground
上面的程式是不言自明的,它將列印:
i = 0 , j = 1
i = 0 , j = 2
i = 0 , j = 3
i = 1 , j = 1
i = 1 , j = 2
i = 1 , j = 3
i = 2 , j = 1
i = 2 , j = 2
i = 2 , j = 3
復制代碼
這沒有什么特殊的!
如果我們想在 i 和 j 相等時停止列印該怎么辦,為此,我們需要退出外部 for 回圈, 當 i 和 j 相等時,在內部 for 回圈中添加 break 只會退出內部 for 回圈,
package main
import (
"fmt"
)
func main() {
for i := 0; i < 3; i++ {
for j := 1; j < 4; j++ {
fmt.Printf("i = %d , j = %d\n", i, j)
if i == j {
break
}
}
}
}
復制代碼
Run in playground
在上面的程式中,當第 10 行的 i 和 j 相等時,我在內部的 for 回圈中添加了一個 break,這只會退出內部 for 回圈,而外部回圈將繼續執行,該程式將列印:
i = 0 , j = 1
i = 0 , j = 2
i = 0 , j = 3
i = 1 , j = 1
i = 2 , j = 1
i = 2 , j = 2
復制代碼
這不是預期的輸出,當 i 和 j 相等時,即當它們等于 1 時,我們需要停止列印,標簽可用于從外部回圈中斷開,讓我們使用標簽重寫上面的程式:
package main
import (
"fmt"
)
func main() {
outer:
for i := 0; i < 3; i++ {
for j := 1; j < 4; j++ {
fmt.Printf("i = %d , j = %d\n", i, j)
if i == j {
break outer
}
}
}
}
復制代碼
Run in playground
在上面的程式中,我們在外部 for 回圈的第 8 行中添加了標簽 outer,在第 13 行中,通過指定標簽來中斷外部 for 回圈,當 i 和 j 相等時,該程式將停止列印,該程式將輸出:
i = 0 , j = 1
i = 0 , j = 2
i = 0 , j = 3
i = 1 , j = 1
復制代碼
更多示例
讓我們寫更多的代碼來覆寫 for 回圈的所有變體,下面的程式列印從 0 到 10 的所有偶數,
package main
import (
"fmt"
)
func main() {
i := 0
for ;i <= 10; { // initialisation and post 被省略
fmt.Printf("%d ", i)
i += 2
}
}
復制代碼
Run in playground
我們已經知道 for 回圈的所有三個部分,即 initialisation、condition 和 post 都是可選的,在上述程式中,省略了initialisation 和 post,在 for 回圈外,i 被初始化為 0,只要 i <= 10,回圈就會執行,我在 for 回圈內增加了 2,上面的程式輸出 0 2 4 6 8 10,
也可以省略上述程式的 for 回圈中的分號,可以將這種格式視為 while 回圈的替代方法,上面的程式可以改寫為:
package main
import (
"fmt"
)
func main() {
i := 0
for i <= 10 { // 分號被省略,只剩下條件陳述句
fmt.Printf("%d ", i)
i += 2
}
}
復制代碼
Run in playground
可以在 for 回圈中宣告多個變數并對其進行操作,讓我們撰寫一個使用多個變數宣告列印以下序列的程式,
10 * 1 = 10
11 * 2 = 22
12 * 3 = 36
13 * 4 = 52
14 * 5 = 70
15 * 6 = 90
16 * 7 = 112
17 * 8 = 136
18 * 9 = 162
19 * 10 = 190
復制代碼
package main
import (
"fmt"
)
func main() {
for no, i := 10, 1; i <= 10 && no <= 19; i, no = i+1, no+1 {
fmt.Printf("%d * %d = %d\n", no, i, no*i)
}
}
復制代碼
Run in playground
在上面的程式中,no 和 i 被宣告并分別初始化為 10 和 1,在每次迭代結束時,它們將增加 1,布爾運算子 && 用于確保 i 小于或等于 10 以及 no 小于或等于 19 的條件成立,
無限回圈
創建無限回圈的語法是:
for {
}
復制代碼
以下程式將持續列印 Hello World,而不會終止,
package main
import "fmt"
func main() {
for {
fmt.Println("Hello World")
}
}
復制代碼
如果嘗試在 go park 中運行上述程式,則會收到錯誤訊息 process took too long,請嘗試在你的本地系統中運行它以無限列印 Hello World,
還有一個范圍 range可以在 for 回圈中用于陣列操作,當我們在后續教程中了解陣列時,我們將進行介紹,
Go相關的資料,博主已幫大家整理好,如有需要可加v:codeMaster001,免費贈送
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/272553.html
標籤:區塊鏈
上一篇:創建自己的區塊鏈網路 四
下一篇:Go語言學習筆記(一)
