Go語言入門2-流程控制語句

1.遞增遞減語句

在Go當中,++ 與 – 是作爲語句而並不是作爲表達式

func main() {
	a := 1	//a++不能放在=號右面
	a++		//不可以寫成++a
	var p *int = &a
	fmt.Println(*p)	//2
}

2.判斷語句if

  • 條件表達式沒有括號
  • 支持一個初始化表達式(可以是並行方式)
  • 左大括號必須和條件語句或else在同一行
  • 支持單行模式
  • 初始化語句中的變量爲block級別,同時隱藏外部同名變量
func main() {
	a := 10;
	if a:=1; a < 5{
		fmt.Println(a)	//1	此時取if語句定義的a,全局的同名變量a將被隱藏
	}
	fmt.Println(a)	//10
}

3.循環語句for

  • Go只有for一個循環語句關鍵字,但支持3種形式
  • 初始化和步進表達式可以是多個值
  • 條件語句每次循環都會被重新檢查,因此不建議在條件語句中使用函數,儘量提前計算好條件並以變量或常量代替
  • 左大括號必須和條件語句在同一行
func main(){
	a := 1
	for {
		a++
		if a > 3{
			break
		}
	}
	fmt.Println(a)	//4
}
func main(){
	a := 1
	for a <= 3 {
		a++
	}
	fmt.Println(a)	//4
}
func main(){
	a := 1
	for i := 0; i < 3; i++{
		a++
	}
	fmt.Println(a)	//4
}

4.選擇語句switch

  • 可以使用任何類型或表達式作爲條件語句
  • 不需要寫break,一旦條件符合自動終止
  • 如希望繼續執行下一個case,需使用fallthrough語句
  • 支持一個初始化表達式(可以是並行方式),右側需跟分號
  • 左大括號必須和條件語句在同一行
func main(){
	a := 1
	switch a {
	case 0:
		fmt.Println("a=0")
	case 1:
		fmt.Println("a=1")	//打印出來
	}
	fmt.Println(a)	//1
}
func main(){
	a := 1
	switch {
	case a >= 0:
		fmt.Println("ok")	//ok
		fallthrough
	case a >= 1:
		fmt.Println("ok")	//ok
	}
	fmt.Println(a)			//1
}
func main(){
	switch a:=1;{
	case a >= 0:
		fmt.Println("ok")	//ok
		fallthrough
	case a >= 1:
		fmt.Println("ok")	//ok
	}
	//fmt.Println(a)		//編譯出錯	undefined: a
}

5.跳轉語句goto, break, continue

下面的示例中包含了嵌套的循環體,break 只會退出最內層的循環:

package main

func main() {
	for i:=0; i<3; i++ {
		for j:=0; j<10; j++ {
			if j>5 {
			    break   
			}
			print(j)
		}
		print("  ")
	}
}

輸出:

012345 012345 012345

關鍵字 continue 忽略剩餘的循環體而直接進入下一次循環的過程,但不是無條件執行下一次循環,執行之前依舊需要滿足循環的判斷條件。

package main

func main() {
	for i := 0; i < 10; i++ {
		if i == 5 {
			continue
		}
		print(i)
		print(" ")
	}
}

輸出:

0 1 2 3 4 6 7 8 9

顯然,5 被跳過了。
另外,關鍵字 continue 只能被用於 for 循環中。

goto語句可以無條件地轉移到過程中指定的行。 通常與條件語句配合使用。可用來實現條件轉移, 構成循環,跳出循環體等功能。
在結構化程序設計中一般不主張使用goto語句, 以免造成程序流程的混亂
goto對應(標籤)既可以定義在for循環前面,也可以定義在for循環後面,當跳轉到標籤地方時,繼續執行標籤下面的代碼。

func main() {
    //  放在for前面,此例會一直循環下去
    Loop:
    fmt.Println("test")
    for a:=0;a<5;a++{
        fmt.Println(a)
        if a>3{
            goto Loop
        }
    }
}

func main() {
    for a:=0;a<5;a++{
        fmt.Println(a)
        if a>3{
            goto Loop
        }
    }
    Loop:           //放在for後邊
    fmt.Println("test")
}
  • 三個語法都可以配合標籤使用
  • 標籤名區分大小寫,若不使用會造成編譯錯誤
  • Break與continue配合標籤可用於多層循環的跳出
  • Goto是調整執行位置,與其它2個語句配合標籤的結果並不相同
func main(){
	LABEL:
	for {
		for i := 0; i < 10; i++{
			if i > 2 {
				break LABEL
			}else{
				fmt.Println(i)
			}
		}
	}
}
//打印出0 1 2
func main(){
	LABEL:
		for i := 0; i < 10; i++{
			for {
				fmt.Println(i)
				continue LABEL
			}
		}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章