1. select语句的case表达式,都会在选择之前,先被求值。
2. case表达式,求值的顺序,会依照程序码的编写顺序,从上而下。
而同一个case表达式中的求值顺序,从左边到右边。
3. 当select语句中的所有case表达式都被求值完毕後,才会开始选择case分支。
只会选择满足条件的case分支,如果所有的case分支都不满足条件,就会选择default分支。
如果没有default分支,就会阻塞在select语句,直到至少有一个case分支满足条件。
4. 如果select语句,发现同时有多个case分支满足条件,Go语言会用随机的算法,选择符合条件的一个case分支。
package main
import "fmt"
var channels = [3]chan int{
nil,
make(chan int), //没有buffer
make(chan int, 1), //有buffer,可以放元素值
}
var numbers = []int{1, 2, 3}
func main() {
select {
//先对每一个case表达式求值,才选择case分支
case getChan(0) <- getNumber(0):
fmt.Println("The first candidate case is selected.")
case getChan(2) <- getNumber(2):
fmt.Println("The third candidate case is selected")
case getChan(1) <- getNumber(1):
fmt.Println("The second candidate case is selected.")
default:
fmt.Println("No candidate case is selected!")
}
}
func getNumber(i int) int {
fmt.Printf("numbers[%d]\n", i)
return numbers[i]
}
func getChan(i int) chan int {
fmt.Printf("channels[%d]\n", i)
return channels[i]
}
https://play.golang.org/p/OJePyINYVAn
参考来源:
郝林-Go语言核心36讲
原本是想说要来写资安事件处理流程, 但要串的东西实在太多了, 又加上怕准备的资料不够齐全所以就放弃这...
有一小段时间没跟新了XD! 主要是平时都加班,下班去健身房回到家,就只剩1-2小时的学习时间,就慢慢...
程序开发的过程很难不接触到终端机操作,原生的画面非常"简约",透过套件强化後不只...
Vue-cli 专案基本架构 favicon.ico:仅用於 index.html index.ht...
emit 监听子组件 父组件: 透过v-on监听子组件事件 子组件: 透过$emit传递事件名称 直...