Golang
switch-case 與select
如題來看一下switch-case 與select 是如何運作的,廢話不多說,直接上個範例來瞧瞧吧!
switch-case
package main
import "fmt"
func getType(i interface{}) {
switch t := i.(type) {
case int:
fmt.Printf("is interger %d \n", t)
case string:
fmt.Printf("is string %s \n", t)
case float64:
fmt.Printf("is float64 %v \n", t)
default:
fmt.Printf("type error")
}
}
func main() {
var i int = 100
getType(i)
var j float64 = 45.55
getType(j)
var k string = "foo"
getType(k)
}
Select
Select 是監聽,以下的部分我是覺得有點難懂,所以只能大概大概地寫出來,可能需要真的使用到的時候才能理解其作用
package main
import "fmt"
func main() {
ch := make(chan int, 1)
ch <- 1
select {
case <-ch:
fmt.Println("random 01")
case <-ch:
fmt.Println("random 02")
}
}
這樣執行的時候,其實是會隨機亂跳的,如果把ch <- 1註解起來,則是會報錯” deadlock!”,這時候如果把程式碼修改為
package main
import "fmt"
func main() {
ch := make(chan int, 1)
select {
case <-ch:
fmt.Println("random 01")
case <-ch:
fmt.Println("random 02")
default:
fmt.Println("exit")
}
}
這樣就沒事情了,因為在有default的情況下會去執行他
Select基本上只能應用於channel上,以範例來看是可以做channel的資料接收及溝通使用。如果有滿足多個條件則是隨機選擇,但在switch-case這點就比較不同,就跟其他語言雷同,是看順序的。