GO——SELECT

参考:https://www.runoob.com/go/go-select-statement.html

select

  • 每个case都是一个通信,要么发送,要么接收
    • 除去defalut
  • 循环检测条件,如果满足就执行并结束,如果不满足就一直循环
    • default是默认的,如果在有default的情况下,前面的都不满足,那么这个select肯定就执行default,并结束
    • 没有default,且case都不满足,会阻塞,一直循环判断,直到有满足的
      • 如果有多个满足的,那么公平随机一个,其他忽略
package main

import (
	"fmt"
	"time"
)

func main() {
	a := make(chan int, 1)
	b := make(chan int, 1)
	go func() {
		for i := 0; i < 10; i++ {
			time.Sleep(1000)
			a <- i
		}
	}()

	go func() {
		for i := 0; i < 10; i++ {
			time.Sleep(2000)
			b <- i
		}
	}()

	for i := 0; i < 30; i++ {
		select {
		case v := <-a:
			fmt.Println("get a : ", v)
		case v := <-b:
			fmt.Println("get b : ", v)
		default:
			time.Sleep(1000)
			fmt.Println("223343")
		}

	}
}

你可能感兴趣的:(golang,开发语言)