diff --git a/eBook/06.1.md b/eBook/06.1.md index 5851e7b..2a4397f 100644 --- a/eBook/06.1.md +++ b/eBook/06.1.md @@ -16,7 +16,7 @@ Go 里面有三种类型的函数: - 匿名函数或者lambda函数(参考 [第 6.8 节](06.8.md)) - 方法(Methods,参考 [第 10.6 节](10.6.md)) -所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。 +除了main()、init()函数外,其它所有类型的函数都可以有参数与返回值。函数参数、返回值以及它们的类型被统称为函数签名。 作为提醒,提前介绍一个语法: diff --git a/eBook/14.1.md b/eBook/14.1.md index b176618..0749380 100644 --- a/eBook/14.1.md +++ b/eBook/14.1.md @@ -20,7 +20,7 @@ Go 更倾向于其他的方式,在诸多比较合适的范式中,有个被 当系统调用(比如等待 I/O)阻塞协程时,其他协程会继续在其他线程上工作。协程的设计隐藏了许多线程创建和管理方面的复杂工作。 -协程是轻量的,比线程更轻。它们痕迹非常不明显(使用少量的内存和资源):使用 4K 的栈内存就可以在堆中创建它们。因为创建非常廉价,必要的时候可以轻松创建并运行大量的协程(在同一个一个地址空间中 100,000 个连续的协程)。并且它们对栈进行了分割,从而动态的增加(或缩减)内存的使用;栈的管理是自动的,但不是由垃圾回收器管理的,而是在协程退出后自动释放。 +协程是轻量的,比线程更轻。它们痕迹非常不明显(使用少量的内存和资源):使用 4K 的栈内存就可以在堆中创建它们。因为创建非常廉价,必要的时候可以轻松创建并运行大量的协程(在同一个地址空间中 100,000 个连续的协程)。并且它们对栈进行了分割,从而动态的增加(或缩减)内存的使用;栈的管理是自动的,但不是由垃圾回收器管理的,而是在协程退出后自动释放。 协程可以运行在多个操作系统线程之间,也可以运行在线程之内,让你可以很小的内存占用就可以处理大量的任务。由于操作系统线程上的协程时间片,你可以使用少量的操作系统线程就能拥有任意多个提供服务的协程,而且 Go 运行时可以聪明的意识到哪些协程被阻塞了,暂时搁置它们并处理其他协程。 diff --git a/eBook/14.2.md b/eBook/14.2.md index 1d01f80..10c2010 100644 --- a/eBook/14.2.md +++ b/eBook/14.2.md @@ -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)无法关闭,因为关闭通道是发送者用来表示不再给通道发送值了,所以对只接收通道是没有意义的。通道创建的时候都是双向的,但也可以分配有方向的通道变量,就像以下代码: