channel的使用细节
- channel 使用的注意事项
- 1) channel 中只能存放指定的数据类型
- 2) channle 的数据放满后,就不能再放入了
- 3) 如果从 channel 取出数据后,可以继续放入
- 4) 在没有使用协程的情况下,如果 channel 数据取完了,再取,就会报 dead lock
读写 channel 案例演示
- 创建一个intChan,最多可以存放3个int,演示存3数据到intChan,然后再取出这三个int

- 创建一个mapChan,最多可以存放10个map[string]string的key-al,演示写入和读取。

- 创建一个catChan,最多可以存放10个Cat结构体变量,演示写入和读取的用法

- 创建一个catChan2,最多可以存放10个*Cat变量,演示写入和读取的用法

- 创建一个allChan,最多可以存放10个任意数据类型变量,演示写入和读取的用法

type Cat struct {
Name string
Age int
}
func main() {
//定义一个存放任意数据类型的管道 3个数据
//var allChan chan interface{}
allChan := make(chan interface{}, 3)
allChan<- 10
allChan<- "tom jack"
cat := Cat{"小花猫", 4}
allChan<- cat
//我们希望获得到管道中的第三个元素,则先将前2个推出
<-allChan
<-allChan
newCat := <-allChan //从管道中取出的Cat是什么?
fmt.Printf("newCat=%T , newCat=%v\n", newCat, newCat)
//下面的写法是错误的!编译不通过
//fmt.Printf("newCat.Name=%v", newCat.Name)
//使用类型断言
a := newCat.(Cat)
fmt.Printf("newCat.Name=%v", a.Name)
}