[Golang]select 语句的分支选择规则-心智图总结

1. select语句的case表达式,都会在选择之前,先被求值。

2. case表达式,求值的顺序,会依照程式码的编写顺序,从上而下。
而同一个case表达式中的求值顺序,从左边到右边。

3. 当select语句中的所有case表达式都被求值完毕后,才会开始选择case分支。
只会选择满足条件的case分支,如果所有的case分支都不满足条件,就会选择default分支。
如果没有default分支,就会阻塞在select语句,直到至少有一个case分支满足条件。

4. 如果select语句,发现同时有多个case分支满足条件,Go语言会用随机的算法,选择符合条件的一个case分支。

package mainimport "fmt"var channels = [3]chan int{nil,make(chan int), //没有buffermake(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

http://img2.58codes.com/2024/20131728sY7jSOmEPl.png
参考来源:
郝林-Go语言核心36讲

https://github.com/hyper0x/Golang_Puzzlers


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章