File tree Expand file tree Collapse file tree 1 file changed +11
-7
lines changed Expand file tree Collapse file tree 1 file changed +11
-7
lines changed Original file line number Diff line number Diff line change @@ -4,27 +4,28 @@ go 的有锁数据结构,CSP 概念的组成因子之一。
4
4
## usage
5
5
阻塞式 channel :
6
6
``` go
7
- var a = make (chan int )
7
+ var a = make (chan int )
8
8
```
9
9
非阻塞 channel:
10
10
``` go
11
- var a = make (chan int , 10 )
11
+ var a = make (chan int , 10 )
12
12
```
13
13
阻塞和非阻塞关键就在是否有 capacity。没有 capacity 的话,channel 也就只是个同步通信工具。
14
14
15
15
向 channel 中发送内容:
16
16
``` go
17
- ch := make (chan int , 100 )
18
- ch <- 1
17
+ ch := make (chan int , 100 )
18
+ ch <- 1
19
19
```
20
20
21
21
从 channel 中接收内容:
22
22
``` go
23
- var i := <- ch
23
+ var i := <- ch
24
24
```
25
+
25
26
关闭 channel:
26
27
``` go
27
- close (ch)
28
+ close (ch)
28
29
```
29
30
30
31
在 channel 关闭时自动退出循环
@@ -47,9 +48,12 @@ func main() {
47
48
```
48
49
注意,len 和 cap 并不是函数调用。编译后是直接去取 hchan 的 field 了。
49
50
51
+ ## closed channel
52
+
50
53
## nil channel
51
54
不进行初始化,即不调用 make 来赋值的 channel 称为 nil channel:
52
55
``` go
56
+ var a = chan int
53
57
```
54
58
55
59
# 源码分析
@@ -155,5 +159,5 @@ func makechan(t *chantype, size int) *hchan {
155
159
156
160
157
161
<!-- stackedit_data:
158
- eyJoaXN0b3J5IjpbMTMzNDM3MjQxLDEzNzg3NTI4ODNdfQ==
162
+ eyJoaXN0b3J5IjpbLTIwMjQyMTI4NzgsMTM3ODc1Mjg4M119
159
163
-->
You can’t perform that action at this time.
0 commit comments