From 93401d1790b07f3dc1c4b6cba529a8c3d32eb42a Mon Sep 17 00:00:00 2001 From: marjune Date: Thu, 25 Jul 2019 08:19:30 +0800 Subject: [PATCH] Improve chapter 15 3 (#694) * improve chapter 15.3 * improve chapter 15.5 * improve chapter 15.6 --- eBook/15.3.md | 2 +- eBook/15.5.md | 2 +- eBook/15.6.md | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/eBook/15.3.md b/eBook/15.3.md index a05272c..be19f26 100644 --- a/eBook/15.3.md +++ b/eBook/15.3.md @@ -123,7 +123,7 @@ func main() { * `http.Redirect(w ResponseWriter, r *Request, url string, code int)`:这个函数会让浏览器重定向到 `url`(可以是基于请求 url 的相对路径),同时指定状态码。 * `http.NotFound(w ResponseWriter, r *Request)`:这个函数将返回网页没有找到,HTTP 404错误。 * `http.Error(w ResponseWriter, error string, code int)`:这个函数返回特定的错误信息和 HTTP 代码。 -* 另 `http.Request` 对象的一个重要属性 `req`:`req.Method`,这是一个包含 `GET` 或 `POST` 字符串,用来描述网页是以何种方式被请求的。 +* 另一个 `http.Request` 对象 `req` 的重要属性:`req.Method`,这是一个包含 `GET` 或 `POST` 字符串,用来描述网页是以何种方式被请求的。 go为所有的HTTP状态码定义了常量,比如: ```go diff --git a/eBook/15.5.md b/eBook/15.5.md index 96106e8..691867d 100644 --- a/eBook/15.5.md +++ b/eBook/15.5.md @@ -95,4 +95,4 @@ func logPanics(function HandleFnc) HandleFnc { - [目录](directory.md) - 上一节:[写一个简单的网页应用](15.4.md) -- 下一节:[用模板写网页应用](15.6.md) +- 下一节:[用模板编写网页应用](15.6.md) diff --git a/eBook/15.6.md b/eBook/15.6.md index b1eae4f..7b7fbc7 100644 --- a/eBook/15.6.md +++ b/eBook/15.6.md @@ -118,7 +118,7 @@ func load(title string) (*Page, error) { 让我们来通读代码: -- 首先导入必要的包。由于我们在构建网页服务器,`http` 当然是必须的。不过还导入了 `io/ioutil` 来方便地读写文件,`regexp` 用于验证输入标题,以及 `tremplate` 来动态创建 html 文档。 +- 首先导入必要的包。由于我们在构建网页服务器,`http` 当然是必须的。不过还导入了 `io/ioutil` 来方便地读写文件,`regexp` 用于验证输入标题,以及 `template` 来动态创建 html 文档。 - 为避免黑客构造特殊输入攻击服务器,我们用如下正则表达式检查用户在浏览器上输入的 URL(同时也是 wiki 页面标题): ```go var titleValidator = regexp.MustCompile("^[a-zA-Z0-9]+$") @@ -146,7 +146,7 @@ func load(title string) (*Page, error) { 它基于模板执行,用 `Page` 结构体对象 p 作为参数对模板进行替换,并写入 `ResponseWriter` 对象 w。必须检查该方法的 error 返回值,万一有一个或多个错误,我们可以调用 `http.Error` 来明示。在我们的应用程序中,这段代码会被多次调用,所以把它提取为单独的函数 `renderTemplate`。 - 在 `main()` 中网页服务器用 `ListenAndServe` 启动并监听 8080 端口。但正如 [15.2节](15.2.md) 那样,需要先为紧接在 URL `localhost:8080/` 之后, 以`view`, `edit` 或 `save` 开头的 url 路径定义一些处理函数。在大多数网页服务器应用程序中,这形成了一系列 URL 路径到处理函数的映射,类似于 Ruby 和 Rails,Django 或 ASP.NET MVC 这样的 MVC 框架中的路由表。请求的 URL 与这些路径尝试匹配,较长的路径被优先匹配。如不与任何路径匹配,则调用 / 的处理程序。 - 在此定义了 3 个处理函数,由于包含重复的启动代码,我们将其提取到单独的 `markHandler` 函数中。这是一个值得研究的特殊高阶函数:其参数是一个函数,返回一个新的闭包函数: + 在此定义了 3 个处理函数,由于包含重复的启动代码,我们将其提取到单独的 `makeHandler` 函数中。这是一个值得研究的特殊高阶函数:其参数是一个函数,返回一个新的闭包函数: ```go func makeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) {