Go語言學(xué)習(xí)之Switch語句的使用
基本語法
在講述if-else時已經(jīng)提到,如果有多個判斷條件,Go語言中提供了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í)行后會進(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")
}
}
此時所有的case都會被執(zhí)行
condition 1 triggered
condition 2 triggered
Default triggered
多條件匹配
如果同一個條件滿足,也可以這樣羅列到同一條件,相當(dāng)于或條件
switch i {
case 0, 1:
f()
default:
g()
}
判斷接口(interface)類型
空接口
后面我們會講到接口,通過switch可以對type進(jìn)行判斷,獲取接口的真實類型。
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)
}
}在上面的例子中,我們定義了一個空接口
var value interface{}
同時使用switch來判斷類型
switch q:= value.(type) {
由于空接口沒有內(nèi)容,所以類型為nil,觸發(fā)了default
value is of type: <nil>
獲取實際類型
我們對上面的例子進(jìn)行改造,同時讓空接口擁有實際的值,再來看看執(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)
}
}
這里有幾個還沒有講到的知識點:
- 函數(shù)的定義方法
- 定義了一個map,但是值的類型為空接口,意思就是可以是任何類型的值,這在接口章節(jié)還會詳細(xì)講解,所以大家看到這里不要糾結(jié),繼續(xù)往下看
- 賦值時,特意給value不同的類型, string/int/float類型
最后通過循環(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語言學(xué)習(xí)之Switch語句的使用的文章就介紹到這了,更多相關(guān)Go語言 Switch語句內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Golang?range?slice?與range?array?之間的區(qū)別
這篇文章主要介紹了Golang?range?slice?與range?array?之間的區(qū)別,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-07-07
golang socket斷點續(xù)傳大文件的實現(xiàn)方法
今天小編就為大家分享一篇golang socket斷點續(xù)傳大文件的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07
解決golang 反射interface{}做零值判斷的一個重大坑
這篇文章主要介紹了解決golang 反射interface{}做零值判斷的一個重大坑,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-04-04
簡單了解Go語言中函數(shù)作為值以及函數(shù)閉包的使用
這篇文章主要介紹了簡單了解Go語言中函數(shù)作為值以及函數(shù)閉包的使用,是golang入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-10-10
基于go手動寫個轉(zhuǎn)發(fā)代理服務(wù)的代碼實現(xiàn)
這篇文章主要介紹了基于go手動寫個轉(zhuǎn)發(fā)代理服務(wù)的代碼實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-02-02
Golang實現(xiàn)協(xié)程超時控制的方式總結(jié)
我們知道,go協(xié)程如果不做好處理,很容易造成內(nèi)存泄漏,所以對goroutine做超時控制,才能有效避免這種情況發(fā)生,本文為大家整理了兩個常見的Golang超時控制方法,需要的可以收藏一下2023-05-05

