channel 阻塞
channel通道大小
ch := make(chan int) // Unbuffered 兩個goroutine一發一收, size為0
ch := make(chan int, 100) // Buffered 發送方可以一直塞,除非塞滿不會阻塞unbuffered channel
push block
pull block
Last updated
ch := make(chan int) // Unbuffered 兩個goroutine一發一收, size為0
ch := make(chan int, 100) // Buffered 發送方可以一直塞,除非塞滿不會阻塞Last updated
//package main
import (
"log"
"time"
)
//Goroutine 拉資料出 Channel 時的等待情境
func main() {
ch := make(chan string)
go func() {
log.Println("calculate goroutine starts calculating")
time.Sleep(10*time.Second) // Heavy calculation
log.Println("calculate goroutine push data after 10s")
ch <- "FINISH"
log.Println("calculate goroutine finished")
}()
log.Println("main goroutine is waiting for channel to receive value")
log.Println(<-ch) // goroutine 執行會在此被迫等待
log.Println("main goroutine finished")
}