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) }