Go語(yǔ)言學(xué)習(xí)之Switch語(yǔ)句的使用
基本語(yǔ)法
在講述if-else時(shí)已經(jīng)提到,如果有多個(gè)判斷條件,Go語(yǔ)言中提供了Switch-Case的方式。如果switch后面不帶條件相當(dāng)于switch true
// Convert hexadecimal character to an int value
switch {
case '0' <= c && c <= '9':
return c - '0'
case 'a' <= c && c <= 'f':
return c - 'a' + 10
case 'A' <= c && c <= 'F':
return c - 'A' + 10
}
return 0
fallthrough使用方法
默認(rèn)情況下,case滿足執(zhí)行后會(huì)進(jìn)行break,后面case即使?jié)M足條件也不再循環(huán),如果想繼續(xù)執(zhí)行,則需要添加fallthrough,
package main
import "fmt"
func main() {
i := 3
switch i {
case i > 0:
fmt.Println("condition 1 triggered")
fallthrough
case i > 2:
fmt.Println("condition 2 triggered")
fallthrough
default:
fmt.Println("Default triggered")
}
}
此時(shí)所有的case都會(huì)被執(zhí)行
condition 1 triggered
condition 2 triggered
Default triggered
多條件匹配
如果同一個(gè)條件滿足,也可以這樣羅列到同一條件,相當(dāng)于或條件
switch i {
case 0, 1:
f()
default:
g()
}
判斷接口(interface)類型
空接口
后面我們會(huì)講到接口,通過(guò)switch可以對(duì)type進(jìn)行判斷,獲取接口的真實(shí)類型。
package main
import "fmt"
func main() {
var value interface{}
switch q:= value.(type) {
case bool:
fmt.Println("value is of boolean type")
case float64:
fmt.Println("value is of float64 type")
case int:
fmt.Println("value is of int type")
default:
fmt.Printf("value is of type: %T", q)
}
}在上面的例子中,我們定義了一個(gè)空接口
var value interface{}
同時(shí)使用switch來(lái)判斷類型
switch q:= value.(type) {
由于空接口沒(méi)有內(nèi)容,所以類型為nil,觸發(fā)了default
value is of type: <nil>
獲取實(shí)際類型
我們對(duì)上面的例子進(jìn)行改造,同時(shí)讓空接口擁有實(shí)際的值,再來(lái)看看執(zhí)行的效果
package main
import "fmt"
func valueType(i interface{}) {
switch q:= i.(type) {
case bool:
fmt.Println("value is of boolean type")
case float64:
fmt.Println("value is of float64 type")
case int:
fmt.Println("value is of int type")
default:
fmt.Printf("value is of type: %T\n", q)
}
}
func main() {
person := make(map[string]interface{}, 0)
person["name"] = "Alice"
person["age"] = 21
person["height"] = 167.64
fmt.Printf("%+v\n", person)
for _, value := range person {
valueType(value)
}
}
這里有幾個(gè)還沒(méi)有講到的知識(shí)點(diǎn):
- 函數(shù)的定義方法
- 定義了一個(gè)map,但是值的類型為空接口,意思就是可以是任何類型的值,這在接口章節(jié)還會(huì)詳細(xì)講解,所以大家看到這里不要糾結(jié),繼續(xù)往下看
- 賦值時(shí),特意給value不同的類型, string/int/float類型
最后通過(guò)循環(huán)將變量傳給valueType函數(shù),看看程序輸出什么結(jié)果
map[age:21 height:167.64 name:Alice]
value is of type: string
value is of int type
value is of float64 type
到此這篇關(guān)于Go語(yǔ)言學(xué)習(xí)之Switch語(yǔ)句的使用的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 Switch語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang?range?slice?與range?array?之間的區(qū)別
這篇文章主要介紹了Golang?range?slice?與range?array?之間的區(qū)別,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-07-07
關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題分析
這篇文章主要介紹了關(guān)于go-zero服務(wù)自動(dòng)收集問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-12-12
golang socket斷點(diǎn)續(xù)傳大文件的實(shí)現(xiàn)方法
今天小編就為大家分享一篇golang socket斷點(diǎn)續(xù)傳大文件的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07
解決golang 反射interface{}做零值判斷的一個(gè)重大坑
這篇文章主要介紹了解決golang 反射interface{}做零值判斷的一個(gè)重大坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04
簡(jiǎn)單了解Go語(yǔ)言中函數(shù)作為值以及函數(shù)閉包的使用
這篇文章主要介紹了簡(jiǎn)單了解Go語(yǔ)言中函數(shù)作為值以及函數(shù)閉包的使用,是golang入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
深入分析Golang Server源碼實(shí)現(xiàn)過(guò)程
這篇文章深入介紹了Golang Server源碼實(shí)現(xiàn)過(guò)程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-02-02
基于go手動(dòng)寫個(gè)轉(zhuǎn)發(fā)代理服務(wù)的代碼實(shí)現(xiàn)
這篇文章主要介紹了基于go手動(dòng)寫個(gè)轉(zhuǎn)發(fā)代理服務(wù)的代碼實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Golang實(shí)現(xiàn)協(xié)程超時(shí)控制的方式總結(jié)
我們知道,go協(xié)程如果不做好處理,很容易造成內(nèi)存泄漏,所以對(duì)goroutine做超時(shí)控制,才能有效避免這種情況發(fā)生,本文為大家整理了兩個(gè)常見(jiàn)的Golang超時(shí)控制方法,需要的可以收藏一下2023-05-05

