go case 旁支控制

case 一般配合 switch, select 使用

swith

case 分支会从上到下执行,一个一个执行分支case 后面的条件判断。

select

所有case 分支右边到 :为止的代码,都会执行

func main() {
	select {
	case <- A():
		fmt.Println("case A")
	case <- B():
		fmt.Println("case B")
	}
}

func A() chan int {
	fmt.Println("this is A")
	c := make(chan int, 1)
	c <- 1
	return c
}

func B() chan int {
	fmt.Println("this is B")
	c := make(chan int, 2)
	c <- 1
	return c
}

输出
···
this is A
this is B
case B
···

select 这里极易出现内存泄漏。for 死循环执行time.After()

for {
		select {
		case <-A():
			fmt.Println("case A")
		case <-B():
			fmt.Println("case B")
		case <-time.After(5 * time.Minute):
			fmt.Println("this time after")
		}
	}

posted @ 2022-04-22 15:01  fanzou  阅读(114)  评论(0编辑  收藏  举报