Go channel的使用细节及案例

channel的使用细节

  • channel 使用的注意事项
    • 1) channel 中只能存放指定的数据类型
    • 2) channle 的数据放满后,就不能再放入了
    • 3) 如果从 channel 取出数据后,可以继续放入
    • 4) 在没有使用协程的情况下,如果 channel 数据取完了,再取,就会报 dead lock

读写 channel 案例演示

  • 创建一个intChan,最多可以存放3个int,演示存3数据到intChan,然后再取出这三个int

Go channel的使用细节及案例_第1张图片


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

Go channel的使用细节及案例_第2张图片


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

Go channel的使用细节及案例_第3张图片


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

Go channel的使用细节及案例_第4张图片


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

Go channel的使用细节及案例_第5张图片


  • channel是空接口类型,注意类型断言
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)
}

 

你可能感兴趣的:(Golang基础,go)