var 变量名 chan 数据类型
数据类型可以是基本类型、指针类型、map、slice,甚至是空接口(可以接收任何类型的变量)
举例:
var intChan chanintvar mapChan map[int]string
说明:
1.channel是引用类型
2.channel必须初始化之后,才能写入,即make之后才能使用
3.channel的容量是固定的
channel应用
var obj int
num :=100
intChan :=make(chanint,10)//初始化(chan 类型,容量)//写入管道,如果写满了,仍旧再写,会报错
intChan <-99
intChan <- num
//读取管道,如果没数据了,仍旧再读,会报错
obj :=<-intChan //都是合法的<-intChan //直接扔数据
遍历管道,不能用普通的for,只能用for-range结构
遍历时,如果channel没有关闭,则数据取完的时候,会出现死锁错误
所以,
遍历管道时,应先将channel关闭,则会正常遍历管道,遍历完后,退出遍历。
funcmain(){
intChan :=make(chanint,100)for i :=0; i <100; i++{
intChan <- i *2}close(intChan)for v :=range intChan {
fmt.Printf("v=%d\n", v)}}
用管道实现协程之间的通信
package main
import"fmt"funcmain(){
intChan :=make(chanint,50)
boolChan :=make(chanbool,1)gofunc(){for i :=0; i <50; i++{
intChan <- i
}close(intChan)}()gofunc(){for v :=range intChan {
fmt.Printf("this is %d!\n", v)}
boolChan <-trueclose(boolChan)}()for{if ok :=<-boolChan; ok {break}}}