<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
流程控制在程式語言中是最偉大的發明了,因為有了它,你可以通過很簡單的流程描述來表達很複雜的邏輯。
流程控制包含分三大類:條件判斷,迴圈控制和無條件跳轉。
if 也許是各種程式語言中最常見的了,它的語法概括起來就是:
如果滿足條件就做某事,否則做另一件事。
Go 裡面 if 條件判斷語句中不需要括號,如下程式碼所示:
if x > 10 { fmt.Println("x is greater than 10") } else { fmt.Println("x is less than 10") }
Go 的 if 還有一個強大的地方就是條件判斷語句裡面允許宣告一個變數,這個變數的作用域,只能在該條件邏輯塊內,其他地方就不起作用瞭如下所示:
// 計算獲取值 x,然後根據 x 返回的大小,判斷是否大於 10。 if x := computedValue(); x > 10 { fmt.Println("x is greater than 10") } else { fmt.Println("x is less than 10") } //這個地方如果這樣呼叫就編譯出錯了,因為 x 是條件裡面的變數 fmt.Println(x)
多個條件的時候如下所示:
if count == 3 { fmt.Println("The count is equal to 3") } else if count < 3 { fmt.Println("The count is less than 3") } else { fmt.Println("The count is greater than 3") }
Go 有 goto 語句——請明智地使用它。用 goto 跳轉到必須在當前函數內定義的標籤。
例如假設這樣一個迴圈:
func myFunc() { i := 0 Here: //這行的第一個詞,以冒號結束作為標籤 println(i) i++ goto Here //跳轉到 Here 去 }
標籤名是大小寫敏感的。
Go 裡面最強大的一個控制邏輯就是 for,它即可以用來回圈讀取資料,又可以當作 while 來 控制邏輯,還能迭代操作。它的語法如下:
for expression1; expression2; expression3 { //... }
expression1
、expression2
和 expression3
都是表示式,其中 expression1 和 expression3 是 變數宣告或者函數呼叫返回值之類的,expression2 是用來條件判斷,expression1在迴圈開始之前呼叫,expression3 在每輪迴圈結束之時呼叫。
一個例子比上面講那麼多更有用,那麼我們看看下面的例子吧:
package main import "fmt" func main(){ sum := 0; for index:=0; index < 10 ; index++ { sum += index } fmt.Println("sum is equal to ", sum) } // 輸出:sum is equal to 45
有些時候需要進行多個賦值操作,由於 Go 裡面沒有,操作,那麼可以使用平行賦值 i, j = i+1, j-1。有些時候如果我們忽略 expression1
和expression3
,
如下:
sum := 1 for ; sum < 1000; { sum += sum }
其中;也可以省略,那麼就變成如下的程式碼了,是不是似曾相識?
對,這就是 while
的功能。
sum := 1 for sum < 1000 { sum += sum }
在迴圈裡面有兩個關鍵操作 break 和 continue ,break操作是跳出當前迴圈,continue是跳過本次迴圈。當巢狀過深的時候,break 可以配合標籤使用,即跳轉至標籤所指定的位置,
詳細參考如下例子:
for index := 10; index > 0; index-- { if index == 5{ break // 或者 continue } fmt.Println(index) } // break 列印出來 10、9、8、7、6 // continue 列印出來 10、9、8、7、6、4、3、2、1
break
和 continue
還可以跟著標號,用來跳到多重回圈中的外層迴圈,for 配合 range 可以用於讀取 slice 和 map 的資料:
for k,v:=range map { fmt.Println("map's key:",k) fmt.Println("map's val:",v) }
由於 Go 支援“多值返回”, 而對於“宣告而未被呼叫”的變數, 編譯器會報錯, 在這種情況下,可以使用_來丟棄不需要的返回值 例如:
for _, v := range map{ fmt.Println("map's val:", v) }
有些時候你需要寫很多的 if-else 來實現一些邏輯處理,這個時候程式碼看上去就很醜很冗長,而且也不易於以後的維護,這個時候 switch 就能很好的解決這個問題。
它的語法如下:
switch sExpr { case expr1: some instructions case expr2: some other instructions case expr3: some other instructions default: other code }
sExpr 和expr1、expr2、expr3 的型別必須一致。Go 的 switch 非常靈活,表示式不必是常數或整數執行的過程從上至下,直到找到匹配項;而如果 switch 沒有表示式,它會匹配true。
i := 10 switch i { case 1: fmt.Println("i is equal to 1") case 2, 3, 4: fmt.Println("i is equal to 2, 3 or 4") case 10: fmt.Println("i is equal to 10") default: fmt.Println("All I know is that i is an integer") }
在上面程式碼中,我們把很多值聚合在了一個 case 裡面,同時,Go 裡面 switch預設相當於每 個case 最後帶有break,匹配成功後不會自動向下執行其他 case,而是跳出整個 switch,但是可以使用 fallthrough
強制執行後面的 case 程式碼。
integer := 6 switch integer { case 4: fmt.Println("The integer was <= 4") case 5: fmt.Println("The integer was <= 5") case 6: fmt.Println("The integer was <= 6") case 7: fmt.Println("The integer was <= 7") case 8: fmt.Println("The integer was <= 8") default: fmt.Println("default case") }
上面的程式將輸出:
The integer was <= 6 The integer was <= 7 The integer was <= 8 default case
到此這篇關於Go語言流程控制詳情的文章就介紹到這了,更多相關Go流程控制內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45