From 0f8f4643bb63f44d5b6d4375b4f6e24531e13f48 Mon Sep 17 00:00:00 2001 From: bingjuny Date: Fri, 2 Sep 2016 19:02:58 +0800 Subject: [PATCH] book.json zh-cn -> zh-hans 1.7 count -> counter --- book.json | 2 +- ch1/ch1-07.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/book.json b/book.json index c1523ba..294f93f 100644 --- a/book.json +++ b/book.json @@ -2,7 +2,7 @@ "gitbook": "2.x.x", "title": "Go语言圣经", "description": "中文版", - "language": "zh-cn", + "language": "zh-hans", "structure": { "readme": "preface.md" }, diff --git a/ch1/ch1-07.md b/ch1/ch1-07.md index 32f97fc..a201aa8 100644 --- a/ch1/ch1-07.md +++ b/ch1/ch1-07.md @@ -85,7 +85,7 @@ func counter(w http.ResponseWriter, r *http.Request) { } ``` -这个服务器有两个请求处理函数,根据请求的url不同会调用不同的函数:对/count这个url的请求会调用到count这个函数,其它的url都会调用默认的处理函数。如果你的请求pattern是以/结尾,那么所有以该url为前缀的url都会被这条规则匹配。在这些代码的背后,服务器每一次接收请求处理时都会另起一个goroutine,这样服务器就可以同一时间处理多个请求。然而在并发情况下,假如真的有两个请求同一时刻去更新count,那么这个值可能并不会被正确地增加;这个程序可能会引发一个严重的bug:竞态条件(参见9.1)。为了避免这个问题,我们必须保证每次修改变量的最多只能有一个goroutine,这也就是代码里的mu.Lock()和mu.Unlock()调用将修改count的所有行为包在中间的目的。第九章中我们会进一步讲解共享变量。 +这个服务器有两个请求处理函数,根据请求的url不同会调用不同的函数:对/count这个url的请求会调用到counter这个函数,其它的url都会调用默认的处理函数。如果你的请求pattern是以/结尾,那么所有以该url为前缀的url都会被这条规则匹配。在这些代码的背后,服务器每一次接收请求处理时都会另起一个goroutine,这样服务器就可以同一时间处理多个请求。然而在并发情况下,假如真的有两个请求同一时刻去更新count,那么这个值可能并不会被正确地增加;这个程序可能会引发一个严重的bug:竞态条件(参见9.1)。为了避免这个问题,我们必须保证每次修改变量的最多只能有一个goroutine,这也就是代码里的mu.Lock()和mu.Unlock()调用将修改count的所有行为包在中间的目的。第九章中我们会进一步讲解共享变量。 下面是一个更为丰富的例子,handler函数会把请求的http头和请求的form数据都打印出来,这样可以使检查和调试这个服务更为方便: