mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 02:35:53 +08:00
6.1 章节 对函数的参数与返回值表述不准确 (#257)
* 对于函数的参数与返回值表述不准确 原表述为: “所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。” 但是,main()与init()这两函数不允许有参数与返回值,故修改为: “除了main()、init()函数外,其它所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。” * 笔误。 * 笔误,重复的chan * 注释错误
This commit is contained in:
@@ -16,7 +16,7 @@ Go 里面有三种类型的函数:
|
||||
- 匿名函数或者lambda函数(参考 [第 6.8 节](06.8.md))
|
||||
- 方法(Methods,参考 [第 10.6 节](10.6.md))
|
||||
|
||||
所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。
|
||||
除了main()、init()函数外,其它所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。
|
||||
|
||||
作为提醒,提前介绍一个语法:
|
||||
|
||||
|
@@ -20,7 +20,7 @@ Go 更倾向于其他的方式,在诸多比较合适的范式中,有个被
|
||||
|
||||
当系统调用(比如等待 I/O)阻塞协程时,其他协程会继续在其他线程上工作。协程的设计隐藏了许多线程创建和管理方面的复杂工作。
|
||||
|
||||
协程是轻量的,比线程更轻。它们痕迹非常不明显(使用少量的内存和资源):使用 4K 的栈内存就可以在堆中创建它们。因为创建非常廉价,必要的时候可以轻松创建并运行大量的协程(在同一个一个地址空间中 100,000 个连续的协程)。并且它们对栈进行了分割,从而动态的增加(或缩减)内存的使用;栈的管理是自动的,但不是由垃圾回收器管理的,而是在协程退出后自动释放。
|
||||
协程是轻量的,比线程更轻。它们痕迹非常不明显(使用少量的内存和资源):使用 4K 的栈内存就可以在堆中创建它们。因为创建非常廉价,必要的时候可以轻松创建并运行大量的协程(在同一个地址空间中 100,000 个连续的协程)。并且它们对栈进行了分割,从而动态的增加(或缩减)内存的使用;栈的管理是自动的,但不是由垃圾回收器管理的,而是在协程退出后自动释放。
|
||||
|
||||
协程可以运行在多个操作系统线程之间,也可以运行在线程之内,让你可以很小的内存占用就可以处理大量的任务。由于操作系统线程上的协程时间片,你可以使用少量的操作系统线程就能拥有任意多个提供服务的协程,而且 Go 运行时可以聪明的意识到哪些协程被阻塞了,暂时搁置它们并处理其他协程。
|
||||
|
||||
|
@@ -27,7 +27,7 @@ ch1 = make(chan string)
|
||||
|
||||
当然可以更短: `ch1 := make(chan string)`。
|
||||
|
||||
这里我们构建一个int通道的通道: `chanOfChans := make(chan chan int)`。
|
||||
这里我们构建一个int通道的通道: `chanOfChans := make(chan int)`。
|
||||
|
||||
或者函数通道:`funcChan := chan func()`(相关示例请看第 [14.17](14.17.md) 节)。
|
||||
|
||||
@@ -525,8 +525,8 @@ for {
|
||||
通道类型可以用注解来表示它只发送或者只接收:
|
||||
|
||||
```go
|
||||
var send_only chan<- int // channel can only receive data
|
||||
var recv_only <-chan int // channel can onley send data
|
||||
var send_only chan<- int // channel can only send data
|
||||
var recv_only <-chan int // channel can onley receive data
|
||||
```
|
||||
|
||||
只接收的通道(<-chan T)无法关闭,因为关闭通道是发送者用来表示不再给通道发送值了,所以对只接收通道是没有意义的。通道创建的时候都是双向的,但也可以分配有方向的通道变量,就像以下代码:
|
||||
|
Reference in New Issue
Block a user