mirror of
https://github.com/unknwon/the-way-to-go_ZH_CN.git
synced 2025-08-12 03:34:15 +08:00
review
This commit is contained in:
@@ -125,7 +125,7 @@ At the end of main() // after 10s
|
||||
|
||||
当 `main()` 函数返回的时候,程序退出:它不会等待任何其他非 main 协程的结束。这就是为什么在服务器程序中,每一个请求都会启动一个协程来处理,`server()` 函数必须保持运行状态。通常使用一个无限循环来达到这样的目的。
|
||||
|
||||
另外,协程是独立的处理单元,一旦陆续启动一些协程,你无法确定他们是什么时候真正开始执行的。你的代码罗技必须具独立于协程调用的顺序。
|
||||
另外,协程是独立的处理单元,一旦陆续启动一些协程,你无法确定他们是什么时候真正开始执行的。你的代码逻辑必须独立于协程调用的顺序。
|
||||
|
||||
为了对比使用一个线程,连续调用的情况,移除 go 关键字,重新运行程序。
|
||||
|
||||
@@ -149,7 +149,7 @@ At the end of main() // after 17 s
|
||||
|
||||
(译者注:标题中的“Go协程(goroutines)” 即是 14 章讲的协程指的是 Go 语言中的协程。而“协程(coroutines)”指的是其他语言中的协程概念,仅在本节出现。)
|
||||
|
||||
在其他语言中,比如 C#,Lua 或者 Python 都有协程的概念。这个名字表明它和 G o协程有些相似,不过有两点不同:
|
||||
在其他语言中,比如 C#,Lua 或者 Python 都有协程的概念。这个名字表明它和 Go协程有些相似,不过有两点不同:
|
||||
|
||||
- Go 协程意味着并行(或者可以以并行的方式部署),协程一般来说不是这样的
|
||||
- Go 协程通过通道来通信;协程通过让出和恢复操作来通信
|
||||
|
@@ -16,7 +16,7 @@
|
||||
|
||||
未初始化的通道的值是nil。
|
||||
|
||||
所以通道稚嫩传输一种类型的数据,比如 `chan int` 或者 `chan string`,所有的类型都可以用于通道,空接口 `interface{}` 也可以。甚至可以(有时非常有用)创建通道的通道。
|
||||
所以通道只能传输一种类型的数据,比如 `chan int` 或者 `chan string`,所有的类型都可以用于通道,空接口 `interface{}` 也可以。甚至可以(有时非常有用)创建通道的通道。
|
||||
|
||||
通道实际上是类型化消息的队列:使数据得以传输。它是先进先出(FIFO)结构的所以可以保证发送给他们的元素的顺序(有些人知道,通道可以比作 Unix shells 中的双向管道(tw-way pipe))。通道也是引用类型,所以我们使用 `make()` 函数来给它分配内存。这里先声明了一个字符串通道 ch1,然后创建了它(实例化):
|
||||
|
||||
@@ -39,7 +39,7 @@ ch1 = make(chan string)
|
||||
|
||||
流向通道(发送)
|
||||
|
||||
`ch <- int1` 表示:用通道 ch 发送变量 int1(二进制操作符,中缀 = 发送)
|
||||
`ch <- int1` 表示:用通道 ch 发送变量 int1(双目运算符,中缀 = 发送)
|
||||
|
||||
从通道流出(接收),三种方式:
|
||||
|
||||
|
Reference in New Issue
Block a user