非缓冲通道
1.先接收后发送,没有接收之前发送不能完成,会被阻塞住。
2.由于第1点,说明非缓冲通道是同步的。
3.由于第1点,说明非缓冲通道并不能使得程序性能提高。
- 发送端每次都需要确保元素值已被接收的情况下,使用非缓冲通道是合适的。
缓冲通道
- 缓冲通道就是队列。
- 使用缓冲通道,能够进行异步处理,提高程序性能。
goto的使用
goto用来打破for死循环
func main(){
unbufchan := make(chan int)
sign := make(chan byte,2)
go func(){
for i := 0;i<10;i++{
select {
case unbufchan <- i:
case unbufchan <- i+10:
default:
fmt.Println("default")
}
time.Sleep(time.Second)
}
close(unbufchan)
fmt.Println("the channel is closed")
sign <- 0
}()
go func(){
loop:
for {
select {
case e,ok := <- unbufchan:
if !ok{
fmt.Println("closed channel")
break loop
}
fmt.Println("e=>",e)
time.Sleep(2*time.Second)
}
}
sign <- 1
}()
<- sign
<- sign
}
定时器timer.Reset的使用
if timer == nil{
timer = time.NewTimer(time.Millisecond)
} else{
timer.Reset(time.Millisecond)
}
拼凑时间
//3小时20分钟
3*time.Hour+20*time.Minute