From 0e99e1b704c33e6787e819f1d7cd19b56bf2bebf Mon Sep 17 00:00:00 2001 From: Xargin Date: Wed, 27 Apr 2016 15:41:19 +0800 Subject: [PATCH] fix typo --- ch8/ch8-01.md | 2 +- ch8/ch8-02.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ch8/ch8-01.md b/ch8/ch8-01.md index 74a523b..6dc315e 100644 --- a/ch8/ch8-01.md +++ b/ch8/ch8-01.md @@ -45,6 +45,6 @@ func fib(x int) int { Fibonacci(45) = 1134903170 ``` -然后主函数返回。主函数返回时,所有的goroutine都会被直接打断,程序退出。除了从主函数退出或者直接终止程序之外,没有其它的编程方法能够让一个goroutine来打断另一个的执行,但是之后可以看到一种方式来实现这个目的,通过goroutine之间的通信来让一个goroutine请求其它的goroutine,并被请求的goroutine自行结束执行。 +然后主函数返回。主函数返回时,所有的goroutine都会被直接打断,程序退出。除了从主函数退出或者直接终止程序之外,没有其它的编程方法能够让一个goroutine来打断另一个的执行,但是之后可以看到一种方式来实现这个目的,通过goroutine之间的通信来让一个goroutine请求其它的goroutine,并让被请求的goroutine自行结束执行。 留意一下这里的两个独立的单元是如何进行组合的,spinning和菲波那契的计算。分别在独立的函数中,但两个函数会同时执行。 diff --git a/ch8/ch8-02.md b/ch8/ch8-02.md index 24ef8f5..e26ac9a 100644 --- a/ch8/ch8-02.md +++ b/ch8/ch8-02.md @@ -1,6 +1,6 @@ ## 8.2. 示例: 并发的Clock服务 -网络编程是并发大显身手的一个领域,由于服务器是最典型的需要同时处理很多连接的程序,这些连接一般来自远彼此独立的客户端。在本小节中,我们会讲解go语言的net包,这个包提供编写一个网络客户端或者服务器程序的基本组件,无论两者间通信是使用TCP,UDP或者Unix domain sockets。在第一章中我们已经使用过的net/http包里的方法,也算是net包的一部分。 +网络编程是并发大显身手的一个领域,由于服务器是最典型的需要同时处理很多连接的程序,这些连接一般来自于彼此独立的客户端。在本小节中,我们会讲解go语言的net包,这个包提供编写一个网络客户端或者服务器程序的基本组件,无论两者间通信是使用TCP,UDP或者Unix domain sockets。在第一章中我们使用过的net/http包里的方法,也算是net包的一部分。 我们的第一个例子是一个顺序执行的时钟服务器,它会每隔一秒钟将当前时间写到客户端: @@ -47,7 +47,7 @@ func handleConn(c net.Conn) { Listen函数创建了一个net.Listener的对象,这个对象会监听一个网络端口上到来的连接,在这个例子里我们用的是TCP的localhost:8000端口。listener对象的Accept方法会直接阻塞,直到一个新的连接被创建,然后会返回一个net.Conn对象来表示这个连接。 -handleConn函数会处理一个完整的客户端连接。在一个for死循环中,将当前的时候用time.Now()函数得到,然后写到客户端。由于net.Conn实现了io.Writer接口,我们可以直接向其写入内容。这个死循环会一直执行,直到写入失败。最可能的原因是客户端主动断开连接。这种情况下handleConn函数会用defer调用关闭服务器侧的连接,然后返回到主函数,继续等待下一个连接请求。 +handleConn函数会处理一个完整的客户端连接。在一个for死循环中,用time.Now()获取当前时刻,然后写到客户端。由于net.Conn实现了io.Writer接口,我们可以直接向其写入内容。这个死循环会一直执行,直到写入失败。最可能的原因是客户端主动断开连接。这种情况下handleConn函数会用defer调用关闭服务器侧的连接,然后返回到主函数,继续等待下一个连接请求。 time.Time.Format方法提供了一种格式化日期和时间信息的方式。它的参数是一个格式化模板标识如何来格式化时间,而这个格式化模板限定为Mon Jan 2 03:04:05PM 2006 UTC-0700。有8个部分(周几,月份,一个月的第几天,等等)。可以以任意的形式来组合前面这个模板;出现在模板中的部分会作为参考来对时间格式进行输出。在上面的例子中我们只用到了小时、分钟和秒。time包里定义了很多标准时间格式,比如time.RFC1123。在进行格式化的逆向操作time.Parse时,也会用到同样的策略。(译注:这是go语言和其它语言相比比较奇葩的一个地方。。你需要记住格式化字符串是1月2日下午3点4分5秒零六年UTC-0700,而不像其它语言那样Y-m-d H:i:s一样,当然了这里可以用1234567的方式来记忆,倒是也不麻烦)