非緩沖通道
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