select
本文带大家认识 Go 语言的 Select 用法,相信大家对于 switch 并不陌生,然而 select 跟 switch 有个共同特性就是都通过 case 的方式来处理,但是 select 跟 switch 处理的事情完全不同,也完全不相容。来看看 switch 有什么特性: 各种类型及型别操作,接口 interface 型别判断 variable.(type),重点是会依照 case 顺序依序执行。先看个例子:
package main
var (
i interface{}
)
func convert(i interface{}) {
switch t := i.(type) {
caseint:
println("i is interger", t)
casestring:
println("i is string", t)
casefloat64:
println("i is float64", t)
default:
println("type not found")
}
}
func main() {
i = 100
convert(i)
i = float64(45.55)
convert(i)
i = "foo"
convert(i)
convert(float32(10.0))
}
运行出来的结果如下:
i is interger 100
i is float64 +4.555000e+001
i is string foo
type not found
而 select 的特性就不同了,只能接收 channel,否则会出错,而 default 会直接执行,所以没有 default 的 select 就会遇到 blocking,假设没有送 value 进去 Channel 就会造成 panic,底下拿几个实际例子来解说。