Merge pull request #5 from iamybj/master

book.json zh-cn -> zh-hans
This commit is contained in:
曹春晖 2016-09-02 19:11:36 +08:00 committed by GitHub
commit 0ebe1a468e
2 changed files with 2 additions and 2 deletions

View File

@ -2,7 +2,7 @@
"gitbook": "2.x.x",
"title": "Go语言圣经",
"description": "<The Go Programming Language>中文版",
"language": "zh-cn",
"language": "zh-hans",
"structure": {
"readme": "preface.md"
},

View File

@ -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数据都打印出来这样可以使检查和调试这个服务更为方便