channel可以實現線程的阻塞。
//創建無緩沖區channel,只能存放一個值。
var ch = make(chan int)
//創建有緩沖區channel,可以存放多個值,值到達上限才會阻塞。
var ch1 = make(chan int,3)
//賦值
ch<-555
//取值
<-ch
//關閉chnneal,關閉后無法在使用
close(ch)
//判斷channel是否關閉
if num,ok:=<-ch;ok==true{
//channel為關閉
}
//遍歷channel
for num:=range ch1{
fmt.Println(num)
}
//定義單向只讀channel
var wrieteCh chan<-int
//定義單向可寫channel
var readCh<-chan int
//雙向channel轉換為單向
var writeCh chan<- int =ch
var readCh <-chan int =ch
單向channel栗子
import (
"fmt"
)
func producer(out chan<- int) {
for i := 0; i < 10; i++ {
out <- i * i
}
close(out)
}
func consumer(in <-chan int) {
for num := range in {
fmt.Println("num=", num)
}
}
func main() {
var ch1 chan int
ch := make(chan int)
go producer(ch)
consumer(ch)
}
栗子
func main() {
ch := make(chan string)
go func() {
for i := 0; i < 2; i++ {
fmt.Println(i)
time.Sleep(time.Second)
}
ch <- "執行完畢"
}()
str:= <-ch
fmt.Println(str)
}
