1. 程式人生 > >Golang學習筆記(九)for迴圈語句

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)
	}
}