Golang學習筆記(九)for迴圈語句
Golang的for相較於java,並不需要使用()括起來,基礎for迴圈格式為for 變數賦值;迴圈控制條件;變數增量或減量。
第一種基礎形式,在for中申明變數,這種變數僅僅作用與該迴圈。
for i := 0; i < 10; i++ {
fmt.Printf("%d ", i)
}
第二種基礎形式,在for迴圈前申明變數,該變數作用於該函式內。該變數可以不寫在for關鍵字後,但";"還是必須要寫上。
i := 0
for ; i < 10; i++ {
fmt.Printf("%d ", i)
}
第三種基礎形式,迴圈控制語句寫在迴圈內,使用一個break關鍵字來結束迴圈。
i := 0
for ; ; i++ {
if i > 10 {
break
}
fmt.Printf("%d ", i)
}
第四種基礎形式,迴圈的三個標準值都不在for關鍵字後寫明。PS:雖然if中已經break了,但因為i++是在Printf前面,所以結束前會列印一個11出來。
i := 0
for ; ; {
if i > 10 {
break
}
i++
fmt.Printf("%d ", i)
}
第五種形式,僅有迴圈條件,即for關鍵字後面只有一個條件表示式。
var i int for i <= 10 { fmt.Println(i) i++ }
第六種形式,無線迴圈,即for關鍵字後什麼都沒有。PS:這裡設定了一個if是為了結束這個無限迴圈;而這裡的i++和上面第四種形式的不一樣,放在了Println後面,就不會列印一個11出來。
var i int
for {
if i == 10 {
break
}
fmt.Println(i)
i++
}
示例:用for迴圈巢狀列印一個99乘法口訣表。
func printFormula() { for i := 1; i < 10; i++ { for j := 1; j <= i; j++ { fmt.Printf("%d × %d = %d ", j, i, i*j) } fmt.Println() } }
示例:用for迴圈巢狀和並行for迴圈,列印一個右下角的直角三角形。PS:巢狀中的第一個for迴圈是為了列印空格
func printRightTriangle() {
for i := 1; i < 10; i++ {
for m := 9; m >= i; m-- {
fmt.Print(" ")
}
for j := 1; j <= i; j++ {
fmt.Print("★")
}
fmt.Println()
}
}
for迴圈中,有一個range關鍵字,是用來遍歷集合用的。PS:在UTF-8編碼中,一箇中文字將佔據3個位元組,所以學字佔了9到11個字元位,習字佔據了12到14個字元位。
str := "123ABCabc學習"
for i, value := range str {
fmt.Printf("第%d位的字元是:%v ,字元是%c \n", i, value, value)
}
示例:用range關鍵字獲取指定位置的字元。PS:這裡獲取的第9個字元,為學字。但獲取10、11位置的字元則為空,因為中文佔用的是三個字元,只能指定該字元第一個佔用的位置。
func traverseString() {
str := "123ABCabc學習"
for i, value := range str {
if i == 9 {
fmt.Printf("第%d位的字元是:%v ,字元是%c \n", i, value, value)
}
}
}
示例:使用range來遍歷切片。
func traverseSlice() {
arr := []int{100, 200, 300}
for i, value := range arr {
fmt.Println(i, "----", value)
}
}
for迴圈中的continue關鍵字,這個和break關鍵字是有區別的,break是直接跳出迴圈,continue是跳出當此迴圈,執行下面的迴圈。PS:對比下面兩個迴圈,使用break的迴圈,將列印到3就跳出整個迴圈,使用continue的迴圈將列印除了4意外的所有數字。
func BreakContinue() {
for i := 0; i < 10; i++ {
if i == 4 {
break
}
fmt.Print(i)
}
fmt.Println()
for i := 0; i < 10; i++ {
if i == 4 {
continue
}
fmt.Print(i)
}
}
for迴圈中的goto關鍵字,可以在迴圈中,將程式碼跳轉至指定的自定義程式碼行。PS:這裡第三行的程式碼是自定義的位置,在迴圈中,當i增加到可以整除5的時候,自動跳轉到第三行程式碼,即重新執行迴圈for。
func FilterNumGoto() {
i := 0
HAHA:
for i < 50 {
i++
if i%5 == 0 {
goto HAHA
}
fmt.Printf("%d ", i)
}
}
示例:通過雙迴圈goto關鍵字查詢100以內的所有素數
func PrimeNumber() {
i := 0
LOOP:
for i < 100 {
i++
for j := 2; j < i; j++ {
if i%j == 0 {
goto LOOP
}
}
fmt.Printf("%d\t", i)
}
}