1.管道本质是队列,先进先出 2.管道是线程安全的,多个协程操作同一个管道时不会发生资源竞争问题 3.channel有类型的,一个string的管道只能放string类型的数据
声明/定义 channel: var 变量名 chan 数据类型 如: var intChan chan int var mapChan chan map[int]string var poicChan chan *Person 注意: 1)管道时引用类型 2)管道必须初始化(make)之后才能写入数据
注意: 1.channel的一旦设定不会改变,但可以出队入队改变长度,先入先出,一边放一边取。 2.取数据可以用<-intChan,可以不用写接收对象,取出丢弃。 3.创建一个allChan,最多可以放10个任意类型,用空接口interface{} 演示代码如下:
package main import ( "fmt" ) type Cat struct{ Name string Age int } func main(){ //定义一个存放任意类型数据的管道 //var allChan chan interface{} allChan := make(chan interface{}, 5) allChan <-10 allChan <-"steven jobs" cat := Cat{"小花猫", 5} allChan <- cat <-allChan <-allChan newChat :=<-allChan fmt.Println(newChat) //编译不通过 //fmt.Printf("newChat.Name = %v", newChat.Name) a := newChat.(Cat) //知识点类型断言 fmt.Printf("newChat.Name = %v", a.Name) }