Go語言流程控制詳情
1、流程控制
流程控制在編程語言中是最偉大的發(fā)明了,因為有了它,你可以通過很簡單的流程描述來表達很復(fù)雜的邏輯。
流程控制包含分三大類:條件判斷,循環(huán)控制和無條件跳轉(zhuǎn)。
2、if 語句
if 也許是各種編程語言中最常見的了,它的語法概括起來就是:
如果滿足條件就做某事,否則做另一件事。
Go 里面 if 條件判斷語句中不需要括號,如下代碼所示:
if x > 10 {
? ? fmt.Println("x is greater than 10")
} else {
? ? fmt.Println("x is less than 10")
}Go 的 if 還有一個強大的地方就是條件判斷語句里面允許聲明一個變量,這個變量的作用域,只能在該條件邏輯塊內(nèi),其他地方就不起作用了如下所示:
// 計算獲取值 x,然后根據(jù) x 返回的大小,判斷是否大于 10。
if x := computedValue(); x > 10 {
? ? fmt.Println("x is greater than 10")
} else {
? ? fmt.Println("x is less than 10")
}
//這個地方如果這樣調(diào)用就編譯出錯了,因為 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")
}3、goto
Go 有 goto 語句——請明智地使用它。用 goto 跳轉(zhuǎn)到必須在當前函數(shù)內(nèi)定義的標簽。
例如假設(shè)這樣一個循環(huán):
func myFunc() {
i := 0
Here: //這行的第一個詞,以冒號結(jié)束作為標簽
println(i)
i++
goto Here //跳轉(zhuǎn)到 Here 去 }標簽名是大小寫敏感的。
4、for語句
Go 里面最強大的一個控制邏輯就是 for,它即可以用來循環(huán)讀取數(shù)據(jù),又可以當作 while 來 控制邏輯,還能迭代操作。它的語法如下:
for expression1; expression2; expression3 {
? ? //...
}expression1、expression2 和 expression3 都是表達式,其中 expression1 和 expression3 是 變量聲明或者函數(shù)調(diào)用返回值之類的,expression2 是用來條件判斷,expression1在循環(huán)開始之前調(diào)用,expression3 在每輪循環(huán)結(jié)束之時調(diào)用。
一個例子比上面講那么多更有用,那么我們看看下面的例子吧:
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
}在循環(huán)里面有兩個關(guān)鍵操作 break 和 continue ,break操作是跳出當前循環(huán),continue是跳過本次循環(huán)。當嵌套過深的時候,break 可以配合標簽使用,即跳轉(zhuǎn)至標簽所指定的位置,
詳細參考如下例子:
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、1break 和 continue 還可以跟著標號,用來跳到多重循環(huán)中的外層循環(huán),for 配合 range 可以用于讀取 slice 和 map 的數(shù)據(jù):
for k,v:=range map {
? ? fmt.Println("map's key:",k)
? ? fmt.Println("map's val:",v)
}由于 Go 支持“多值返回”, 而對于“聲明而未被調(diào)用”的變量, 編譯器會報錯, 在這種情況下,可以使用_來丟棄不需要的返回值 例如:
for _, v := range map{
? ? fmt.Println("map's val:", v)
}5、switch
有些時候你需要寫很多的 if-else 來實現(xiàn)一些邏輯處理,這個時候代碼看上去就很丑很冗長,而且也不易于以后的維護,這個時候 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 非常靈活,表達式不必是常量或整數(shù)執(zhí)行的過程從上至下,直到找到匹配項;而如果 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,匹配成功后不會自動向下執(zhí)行其他 case,而是跳出整個 switch,但是可以使用 fallthrough強制執(zhí)行后面的 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")
}上面的程序?qū)⑤敵觯?/strong>
The integer was <= 6 The integer was <= 7 The integer was <= 8 default case
到此這篇關(guān)于Go語言流程控制詳情的文章就介紹到這了,更多相關(guān)Go流程控制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型
這篇文章主要介紹了golang語言如何將interface轉(zhuǎn)為int, string,slice,struct等類型,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
使用Gin框架搭建一個Go Web應(yīng)用程序的方法詳解
在本文中,我們將要實現(xiàn)一個簡單的 Web 應(yīng)用程序,通過 Gin 框架來搭建,主要支持用戶注冊和登錄,用戶可以通過注冊賬戶的方式創(chuàng)建自己的賬號,并通過登錄功能進行身份驗證,感興趣的同學(xué)跟著小編一起來看看吧2023-08-08
go?time.After優(yōu)化后性能提升34%內(nèi)存減少67%
這篇文章主要介紹了go語言time.After優(yōu)化后性能提升34%內(nèi)存減少67%實例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-02-02
Go語言開發(fā)中有了net/http為什么還要有g(shù)in的原理及使用場景解析
這篇文章主要為大家介紹了Go語言有了net/http標準庫為什么還要有g(shù)in第三方庫的原理及使用場景詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08
golang 在windows中設(shè)置環(huán)境變量的操作
這篇文章主要介紹了golang 在windows中設(shè)置環(huán)境變量的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04

