File tree Expand file tree Collapse file tree 3 files changed +45
-17
lines changed Expand file tree Collapse file tree 3 files changed +45
-17
lines changed Original file line number Diff line number Diff line change 18
18
}
19
19
20
20
func main () {
21
- /* 开启一个goroutine去执行hello函数*/
22
- go hello ()
23
- fmt.Println (" main end" )
21
+ /* 开启一个goroutine去执行hello函数*/
22
+ go hello ()
23
+ fmt.Println (" main end" )
24
24
}
25
25
```
26
26
64
64
65
65
* 定义:channel是一种类型,默认值是nil。channel是引用类型,如果作为函数参数,是传引用。
66
66
67
+ 多个goroutine之间,可以通过channel来通信,一个goroutine可以发送数据到指定channel,其它goroutine可以从这个channel里接收数据。
68
+
69
+ channel就像队列,满足FIFO原则,定义channel的时候必须指定channel要传递的元素类型。
70
+
67
71
* 语法:
68
72
69
73
``` go
85
89
ch8 := make (chan struct_type)
86
90
```
87
91
88
- * 示例:
92
+ * 使用:channel有3种操作,发送数据,接收数据和关闭channel。发送和接收都是用 ** <- ** 符号
89
93
90
- * 使用
94
+ * 发送值到通道:channel <- value
91
95
92
-
96
+ ``` go
97
+ ch := make (chan int )
98
+ ch <- 10 // 把10发送到ch里
99
+ ```
100
+
101
+ * 从通道接收值:value <- channel
102
+
103
+ ` ` ` go
104
+ ch := make(chan int)
105
+ x := <-ch // 从通道ch里接收值,并复制给变量x
106
+ <-ch // 从通道里接收值,不做其它处理
107
+ ` ` `
108
+
109
+ * 关闭通道
110
+
111
+ ` ` ` go
112
+ ch := make(chan int)
113
+ close(ch) // 关闭通道
114
+ ` ` `
115
+
116
+ * 缓冲区:channel默认没有缓冲区,可以在定义channel的时候指定缓冲区长度,也就是缓冲区可以存储的元素个数
117
+
118
+ * 遍历通道
119
+ * 单向通道:指定通道方向
93
120
94
121
## 并发同步和锁
95
122
Original file line number Diff line number Diff line change 89
89
90
90
* 变量类型
91
91
92
- * 数值:整数,浮点数,复数
92
+ * 数值:整数,浮点数,复数,默认值是0
93
93
94
- * bool
94
+ * bool,默认值是false
95
95
96
- * 字符串
96
+ * 字符串,默认值是空串""
97
97
98
- * 指针:var a *int
98
+ * 指针:var a *int,默认值是nil
99
99
100
100
```go
101
101
num := 100
102
102
var a * int = &num
103
103
```
104
104
105
- * 数组:var a []int
105
+ * 数组:var a []int,默认值是nil
106
106
107
107
```go
108
108
var a []int = []int{1,2}
109
109
list := [6]int{1,2} //size为6的数组,前面2个元素是1和2,后面的是默认值0
110
110
```
111
111
112
- * map:var a map[string] int
112
+ * map:var a map[string] int,默认值是nil
113
113
114
114
```go
115
115
dict := map[string] int{"a":1, "b":2}
116
116
```
117
117
118
- * 函数:var a func(string) int
118
+ * 函数:var a func(string) int,默认值是nil
119
119
120
120
```go
121
121
function := func(str string) string {
125
125
fmt.Println("result=", result)
126
126
```
127
127
128
- * 结构体: var instance Struct
128
+ * 结构体: var instance Struct,默认值是nil
129
129
130
130
```go
131
131
type Circle struct {
136
136
c1.radius = 10.00
137
137
```
138
138
139
- * channel:var a chan int
139
+ * channel:var a chan int // 通道,默认值是nil
140
140
141
- * 接口:var a error // error是接口
141
+ * 接口:var a error // error是接口interface,默认值是nil
142
142
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ var getSquareRoot2 = func(x float64) float64 {
17
17
type callback_func func (int ) int
18
18
19
19
20
+ // function calValue accepts a function variable cb as its second argument
20
21
func calValue (x int , cb callback_func ) int {
21
22
fmt .Println ("[func|calValue]" )
22
23
return cb (x )
@@ -35,6 +36,6 @@ func main() {
35
36
fmt .Println ("result2=" , result2 )
36
37
37
38
value := 81
38
- result3 := calValue (value , realFunc )
39
+ result3 := calValue (value , realFunc ) // use function realFunc as argument of calValue
39
40
fmt .Println ("result3=" , result3 )
40
41
}
You can’t perform that action at this time.
0 commit comments