Go channel的使用细节及案例

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

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个任意数据类型变量,演示写入和读取的用法

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

 

 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服