golang channel基本操作
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)
}

浙公网安备 33010602011771号