Skip to content

Commit aa497c4

Browse files
committed
Update:更新文章
1 parent c59083c commit aa497c4

File tree

6 files changed

+114
-12
lines changed

6 files changed

+114
-12
lines changed

source/c01/c01_05.md

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,35 @@ func main() {
108108

109109
切片的构造,有三种方式
110110

111-
1. 对数组进行片段截取(上面例子已经展示:myarr[0:2],0是索引起始值,2是索引终止值,区间左半右开)
111+
1. 对数组进行片段截取(上面例子已经展示:myarr[0:2],0是索引起始值,2是索引终止值,区间左半右开),当你使用这种方式生成切片对象时,切片的容量会从截取的起始索引到原数组的终止索引
112+
113+
如下这段代码所示,切片从索引值 1 开始,到原数组终止索引值5,中间还可以容纳4个元素,所以容量为 4,但是由于我们切片的时候只要求取到索引值2 (3-1),所以当我们对这个切片进行打印时,并不会打印索引值3,4,5 对应的元素值。
114+
115+
```go
116+
package main
117+
118+
import "fmt"
119+
120+
func main(){
121+
myarr := [5]int{1,2,3,4,5}
122+
fmt.Printf("myarr 的长度为:%d,容量为:%d\n", len(myarr), cap(myarr))
123+
124+
mysli := myarr[1:3]
125+
fmt.Printf("mysli 的长度为:%d,容量为:%d\n", len(mysli), cap(mysli))
126+
127+
fmt.Println(mysli)
128+
}
129+
```
130+
131+
输出如下
132+
133+
```
134+
myarr 的长度为:5,容量为:5
135+
mysli 的长度为:2,容量为:4
136+
[2,3]
137+
```
138+
139+
112140

113141
2. 从头声明赋值(例子如下)
114142

@@ -126,7 +154,7 @@ func main() {
126154
3. 使用 make 函数构造,make 函数的格式:`make( []Type, size, cap )`
127155

128156
这个函数刚好指出了,一个切片具备的三个要素:类型(Type),长度(size),容量(cap)
129-
157+
130158
```go
131159
import (
132160
"fmt"
@@ -138,17 +166,17 @@ func main() {
138166
fmt.Println(a, b)
139167
fmt.Println(len(a), len(b))
140168
fmt.Println(cap(a), cap(b))
141-
}
169+
}
142170
```
143171

144172
输出 如下
145-
173+
146174
```
147175
[0 0] [0 0]
148176
2 2
149177
2 10
150178
```
151-
179+
152180

153181
关于 len 和 cap 的概念,可能不好理解 ,这里举个例子:
154182

@@ -207,9 +235,13 @@ func main() {
207235

208236

209237

210-
最后,给你留一道思考题,如下 这段代码
238+
## 3. 思考题
239+
240+
最后,给你留道思考题。
211241

212242
```go
243+
package main
244+
213245
import (
214246
"fmt"
215247
)
@@ -233,8 +265,6 @@ myslice的第四个元素为: 8
233265

234266

235267

236-
237-
238268
---
239269

240270
![](http://image.python-online.cn/image-20200320125724880.png)

source/c01/c01_05.rst

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,37 @@
110110

111111
切片的构造,有三种方式
112112

113-
1. 对数组进行片段截取(上面例子已经展示:myarr[0:2],0是索引起始值,2是索引终止值,区间左半右开)
113+
1. 对数组进行片段截取(上面例子已经展示:myarr[0:2],0是索引起始值,2是索引终止值,区间左半右开),当你使用这种方式生成切片对象时,切片的容量会从截取的起始索引到原数组的终止索引
114+
115+
如下这段代码所示,切片从索引值 1
116+
开始,到原数组终止索引值5,中间还可以容纳4个元素,所以容量为
117+
4,但是由于我们切片的时候只要求取到索引值2
118+
(3-1),所以当我们对这个切片进行打印时,并不会打印索引值3,4,5
119+
对应的元素值。
120+
121+
.. code:: go
122+
123+
package main
124+
125+
import "fmt"
126+
127+
func main(){
128+
myarr := [5]int{1,2,3,4,5}
129+
fmt.Printf("myarr 的长度为:%d,容量为:%d\n", len(myarr), cap(myarr))
130+
131+
mysli := myarr[1:3]
132+
fmt.Printf("mysli 的长度为:%d,容量为:%d\n", len(mysli), cap(mysli))
133+
134+
fmt.Println(mysli)
135+
}
136+
137+
输出如下
138+
139+
::
140+
141+
myarr 的长度为:5,容量为:5
142+
mysli 的长度为:2,容量为:4
143+
[2,3]
114144

115145
2. 从头声明赋值(例子如下)
116146

@@ -203,10 +233,15 @@
203233

204234
[0 1 2 3 4 5 6 7 8]
205235

206-
最后,给你留一道思考题,如下 这段代码
236+
3. 思考题
237+
---------
238+
239+
最后,给你留道思考题。
207240

208241
.. code:: go
209242
243+
package main
244+
210245
import (
211246
"fmt"
212247
)

source/c04/c04_03.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,15 @@ x 的值:1000
333333

334334
如果不加锁,输出会小于1000。
335335

336-
336+
## 7. 几个注意事项
337+
338+
1. 关闭一个未初始化的 channel 会产生 panic
339+
2. 重复关闭同一个 channel 会产生 panic
340+
3. 向一个已关闭的 channel 发送消息会产生 panic
341+
4. 从已关闭的 channel 读取消息不会产生 panic,且能读出 channel 中还未被读取的消息,若消息均已被读取,则会读取到该类型的零值。
342+
5. 从已关闭的 channel 读取消息永远不会阻塞,并且会返回一个为 false 的值,用以判断该 channel 是否已关闭(x,ok := <- ch)
343+
6. 关闭 channel 会产生一个广播机制,所有向 channel 读取消息的 goroutine 都会收到消息
344+
7. channel 在 Golang 中是一等公民,它是线程安全的,面对并发问题,应首先想到 channel。
337345

338346

339347

source/c04/c04_03.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,21 @@ range关键字,在range时,要确保信道是处于关闭状态,否则循
327327

328328
如果不加锁,输出会小于1000。
329329

330+
7. 几个注意事项
331+
---------------
332+
333+
1. 关闭一个未初始化的 channel 会产生 panic
334+
2. 重复关闭同一个 channel 会产生 panic
335+
3. 向一个已关闭的 channel 发送消息会产生 panic
336+
4. 从已关闭的 channel 读取消息不会产生 panic,且能读出 channel
337+
中还未被读取的消息,若消息均已被读取,则会读取到该类型的零值。
338+
5. 从已关闭的 channel 读取消息永远不会阻塞,并且会返回一个为 false
339+
的值,用以判断该 channel 是否已关闭(x,ok := <- ch)
340+
6. 关闭 channel 会产生一个广播机制,所有向 channel 读取消息的 goroutine
341+
都会收到消息
342+
7. channel 在 Golang
343+
中是一等公民,它是线程安全的,面对并发问题,应首先想到 channel。
344+
330345
--------------
331346

332347
|image0|

source/c06/c06_01.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,4 +190,10 @@ Go 语言爱好者的聚集地,是目前最大的Go 语言中文社区,关
190190

191191

192192

193+
## 21. Go 语言设计与实现
194+
195+
**网站链接**https://draveness.me/golang/
196+
197+
![](http://image.iswbm.com/20200502110042.png)
198+
193199
![](http://image.python-online.cn/image-20200320125724880.png)

source/c06/c06_01.rst

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,8 +212,15 @@ Go历史版本的下载,各种高质量的电子书资源,各种大牛写的
212212

213213
|image19|
214214

215+
21. Go 语言设计与实现
216+
---------------------
217+
218+
**网站链接**\ :https://draveness.me/golang/
219+
215220
|image20|
216221

222+
|image21|
223+
217224
.. |image0| image:: http://image.iswbm.com/20200430112024.png
218225
.. |image1| image:: http://image.iswbm.com/20200430102243.png
219226
.. |image2| image:: http://image.iswbm.com/20200430170656.png
@@ -234,5 +241,6 @@ Go历史版本的下载,各种高质量的电子书资源,各种大牛写的
234241
.. |image17| image:: http://image.iswbm.com/20200430174507.png
235242
.. |image18| image:: http://image.iswbm.com/20200430175818.png
236243
.. |image19| image:: http://image.iswbm.com/20200430134207.png
237-
.. |image20| image:: http://image.python-online.cn/image-20200320125724880.png
244+
.. |image20| image:: http://image.iswbm.com/20200502110042.png
245+
.. |image21| image:: http://image.python-online.cn/image-20200320125724880.png
238246

0 commit comments

Comments
 (0)