go語言switch的一個小語法點,case執行順序


學習一個視頻教程時說go里的switch中case是從上往下執行,直到一個case結果是true,開始執行其中的語句塊。

之前學習的時候沒注意到這個。以為是和c++一樣是直接hash命中要執行的case。

試了下,結果是和視頻中說的一致的。實驗代碼如下:

func func2() bool {
	fmt.Println("run in func2")
	return false
}

func func3() bool {
	fmt.Println("run in func3")
	return true
}

func func4() bool {
	fmt.Println("run in func4")
	return true
}

func testSwitch() {
	switch {
	case func1():
		fmt.Println("into 1")
	case func2():
		fmt.Println("into 2")
	case func3():
		fmt.Println("into 3")
	case func4():
		fmt.Println("into 4")
	}
	fmt.Println("testSwitch run end")
} 

 

運行結果:

run in func1
run in func2
run in func3
into 3

其實也是,回想c++,它的switch是有很多限制,case里的需要是整型或枚舉,所以它能做到hash。而go對於這個switch寫法,,它這沒這效率的考慮,設計的方便寬廣的多,而想hash也是hash不了的吧。

不過,可能就要考慮一些case里表達式會被執行的一些副作用影響,寫代碼時候需要注意些。

而且從上往下都執行,可能,和if相比差別也就是語法靈活性上、或者表達清晰上,選擇時,也沒有效率考慮啥事了。

 

后面也試了下正常些的go的 switch寫法 switch 處有個變量,做匹配判斷的:

func testSwitch() {
	var iv int = 3
	switch iv {
	case func1int():
		fmt.Println("into 1")
	case func2int():
		fmt.Println("into 2")
	case func3int():
		fmt.Println("into 3")
	case func3int():
		fmt.Println("into 4")
	}
	fmt.Println("testSwitch run end")
}

  

其中幾個case的函數返回的分別是整型 1,2,3,4。執行結果還是這樣:

run in func1
run in func2
run in func3
into 3

 

go的siwtch底層實現還沒看,可能說的會有偏頗地方,以上只是做了個簡單實驗驗證。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM