1.主要作用于channel之上
package main
import (
"fmt"
"time"
)
//dead_lock产生的一些场景
func main() {
/*
go语言提供了一个select的功能,作用于channel之上,多路复用
select 会随机公平地选择一个case语句执行
select的应用场景:timeout的超时机制
*/
ch1 := make(chan int, 1)
ch2 := make(chan int, 1)
ch1 <- 1
ch2 <- 2
select {
case data := <-ch1:
fmt.Println(data)
case data := <-ch2:
fmt.Println(data)
}
timeout := false
go func() {
//该goroutine如果执行时间超过了1s,那么就报告给组的goroutine
time.Sleep(time.Second * 2)
timeout = true
}()
for {
if timeout {
fmt.Println("结束")
}
time.Sleep(time.Millisecond * 10)
}
}