![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
源码分析
浩玥当空照
写的过程就是在学习
展开
-
18-chan原理2-读取
4. 读取chan由汇编可以看出,读取一个chan,转化为对runtime.chanrecv1()的调用。如果采用两个返回值方式,则转化为runtime.chanrecv2()调用,区别在于返回一个bool值,标识是否接收到了数据。参数1,chan本身。参数2,接收读取数据的变量。var var_chan_1 = make(chan int)var_read = <-var_c...原创 2019-07-18 07:44:41 · 428 阅读 · 0 评论 -
19-chan原理3-发送
5. 发送chan由汇编可以看出,向chan发送数据会转化为对runtime.chansend1()->chansend()->send()的调用。 tmp :=9999 var_chan_1 <- tmp 0x00fb 00251 (channel.go:32) MOVQ $9999, ""..autotmp_6+64(SP...原创 2019-07-18 07:45:29 · 341 阅读 · 0 评论 -
20-chan原理4-select
6. selectselect语句的语法:每个case都必须是一个channel的发送、或者接收操作。所有channel表达式都会被求值。如果任意case中表达式可以进行,它就执行,其他被忽略。如果有多个 case都可以运行,Select会随机公平地选出一个执行。其他不会执行。一个没有任何case的select语句写作select{},会永远地等待下去没有break。否则:如果...原创 2019-07-18 07:46:30 · 153 阅读 · 0 评论 -
21-chan原理5-close
关闭channel关闭一个channel的底层实现是 runtime.closechanclose(var_chan_1)//对应汇编0x0146 00326 (channel.go:51) CALL runtime.closechan(SB)runtime.closechansrc\runtime\chan.go加锁channel的关闭过程是加锁的。 发送、读取...原创 2019-08-04 15:06:29 · 275 阅读 · 0 评论 -
22-go内置函数
内置函数go语言提供了一些列内置函数1. append给slice添加元素,有多种用法:直接添加元素,可以同时添加多个.将另外1个切片添加到指定切片.将string添加到byte切片.1.1 切片容量问题添加新的元素后,原来切片的容量足够,就将元素直接放在原来切片的数组内。如果超出了原来切片容量,append将会新建一个slice,为新的slice的底层数组重新申请一块内存,...原创 2019-08-11 00:00:06 · 165 阅读 · 0 评论