Go語言 第4章 流程控制

2022-06-26 22:06:18 字數 4597 閱讀 2395

第4章 流程控制 

主要內容

go語言規定與if匹配的左括號「 else if 表示式2 else

// > 10

特殊寫法

if 還有特殊的寫法,可以在if表示式之前新增乙個執行語句,再根據變數值進行判斷,如:

if err := connect(); err !=nil

connect() 為假設的函式,err := connect() 可以視為乙個表示式

4.2 構建迴圈--for

go語言中所有迴圈型別均可以使用for關鍵字完成

for 初始語句;條件表示式; 結束語句 

for 迴圈可以通過break
,goto,return,panic語句強制退出迴圈

4.2.1 for中初始語句--開始執行的語句

初始語句可以被忽略,但是初始語句之後的分號必須要寫

step := 2

for ; step > 0; step--

// 2

// 1

4.2.2 for中條件表示式--控制是否迴圈的開關

條件表示式也可以被忽略,忽略預設為無限迴圈

結束迴圈時帶可執行語句的無限迴圈

var i int

for ; ; i++

} // i > 10

無限迴圈

for 

i++} // i > 10

4.2.3 for中結束語句--每次迴圈結束時執行的語句

在結束每次迴圈前執行的語句,被break 、goto、return、panic等語句強制推出

示例:

// 遍歷九九乘法表

for x:=1; x < 10; x++

fmt.printf("\r\n")

}​結果1 * 1 = 1

2 * 1 = 2 2 * 2 = 4

3 * 1 = 3 3 * 2 = 6 3 * 3 = 9

4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16

5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25

6 * 1 = 6 6 * 2 = 12 6 * 3 = 18 6 * 4 = 24 6 * 5 = 30 6 * 6 = 36

7 * 1 = 7 7 * 2 = 14 7 * 3 = 21 7 * 4 = 28 7 * 5 = 35 7 * 6 = 42 7 * 7 = 49

8 * 1 = 8 8 * 2 = 16 8 * 3 = 24 8 * 4 = 32 8 * 5 = 40 8 * 6 = 48 8 * 7 = 56 8 * 8 = 64

9 * 1 = 9 9 * 2 = 18 9 * 3 = 27 9 * 4 = 36 9 * 5 = 45 9 * 6 = 54 9 * 7 = 63 9 * 8 = 72 9 * 9 = 81

go語言可以使用for range遍歷、資料、切片、字串、map及通道(channel)

規律:4.4.1 遍歷陣列、切片--獲得索引和元素

for key, value := range int 

​//key: 0, value: 1

//key: 1, value: 2

//key: 2, value: 3

//key: 3, value: 4

4.4.2 遍歷字串--獲得字元

for key, value := range "abcdef" 

​//key: 0, value: 0x61

//key: 1, value: 0x62

//key: 2, value: 0x63

//key: 3, value: 0x64

//key: 4, value: 0x65

//key: 5, value: 0x66

4.4.3 遍歷字典map--獲得鍵和值

m := map[int]string   

for key,value := range m

// key: 1, value: one

// key: 2, value: two

// key: 3, value: three

4.4.3 遍歷通道channel -- 接受通道資料

c := make(chan int)

// 啟動乙個goroutine,往通道中推送資料1、2、3,然後關閉通道

go func() ()

​ for v := range c

// 1

// 2

// 3

4.4.5 遍歷中只選擇需要的變數

不需要獲得的key或value,可以用下劃線「-」代替,即匿名變數

匿名變數,可理解為佔位符,本身不會進行空間分配,不會占用變數的名字

for _, value := range int 

​// value: 1

// value: 2

// value: 3

// value: 4

4.4.6 for總結

for 功能:

go語言for包含初始條件,條件表示式、結束語句,這3個均可省略

for range 支援陣列、切片、字串、map、通道遍歷

可使用匿名變數獲取只需要的變數

4.5.1 基本寫法

switch中每個case與case間是獨立的**塊,不需要通過break語句跳出當前case**塊以避免執行到下一行

go語言規定每乙個switch只能有乙個default分支​

var a = "hello"

switch a

分支常見情況:

一分支多值

switch a

分支表示式

var r int = 11

var s int = 5

switch

// 11

如果只有乙個變數判斷的時候,switch後面可以不用新增變數r

4.5.2 跨越case的fallthrough -- 相容c語言的case設計

fallthrough關鍵字用來實現case分支間的執行,應為go語言的case的是獨立的**塊

str := "hello"

switch

// hello

// world

goto語句通過標籤進行**間的無條件跳轉,可以快速跳出迴圈避免重複退出上有一定幫助

4.6.1 使用goto退出多層迴圈

原**:

packeage main

import ("fmt")

func main()

}if breakagain

} fmt.println("done")

}

使用goto語句進行優化:

使用goto語句後,無須額外的變數就可以進行快速退出所有的迴圈

packeage main

import ("fmt")

func main()

}​ }

// 手動返回,避免執行進入標籤

return

​ // 標籤

breakhere:

fmt.println("done")

}

4.6.2 統一錯誤處理

err := firstcheckerror()

if err != nil

​err = secondcheckerror()

if err != nil

​fmt.println("done")

return

​onexit:

fmt.println(err)

break語句可以跳出for 、switch 和select**塊

break語句後面新增標籤,表示退出某個標籤對應的**塊,標籤必須定義在對應的for、switch和select的**塊上

packeage main

import ("fmt")

func main() }}

}

continue語句結束當前循壞,開始下乙個迴圈,僅限於for迴圈內使用

continue語句後面新增標籤時,表示開始標籤對應的迴圈

packeage main

import ("fmt")

func main() }}

// 0 2

// 1 2

// 2 2

// 3 2

}

Go語言 流程控制

if else分支判斷 if condition1 if condition1 else if condition1 else if condition2 else if condition3 else 練習 package main import fmt func main else 練習 寫乙個...

go基礎4 流程控制

所有語言的流程控制都是三個 順序執行 if else for 一 if else 分支結構 if 表示式1else if 表示式2 else func ifdemo1 score 65 if score 90 fmt.println a 1,2 if 條件特殊寫法 在 if表示式之前加乙個執行語句 ...

Go語言流程控制(六)

go語言的流程控制主要有if for和switch。go語言的if判斷 func main else if score 80 else 需要注意的兩點 1.表示式不可以使用 2.起始花括號必須緊跟表示式後面,不可以另起一行 除此之外,if 判斷寫法還有另一種寫法 func main else if ...