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

猜你喜欢

转载自www.cnblogs.com/lemonzwt/p/10068252.html