ch12: fix code path

This commit is contained in:
chai2010
2016-01-20 22:56:40 +08:00
parent 617ef87432
commit 0c1b9762d9
7 changed files with 7 additions and 32 deletions

View File

@@ -6,9 +6,8 @@
首先我們看看如何使用它。下面的search函數是一個HTTP請求處理函數。它定義了一個匿名結構體類型的變量用結構體的每個成員表示HTTP請求的參數。其中結構體成員標籤指明了對於請求參數的名字爲了減少URL的長度這些參數名通常都是神祕的縮略詞。Unpack將請求參數填充到合適的結構體成員中這樣我們可以方便地通過合適的類型類來訪問這些參數。
<u><i>gopl.io/ch12/search</i></u>
```Go
gopl.io/ch12/search
import "gopl.io/ch12/params"
// search implements the /search URL endpoint.
@@ -33,9 +32,8 @@ func search(resp http.ResponseWriter, req *http.Request) {
下一步Unpack函數將構建每個結構體成員有效參數名字到成員變量的映射。如果結構體成員有成員標籤的話有效參數名字可能和實際的成員名字不相同。reflect.Type的Field方法將返迴一個reflect.StructField里面含有每個成員的名字、類型和可選的成員標籤等信息。其中成員標籤信息對應reflect.StructTag類型的字符串併且提供了Get方法用於解析和根據特定key提取的子串例如這里的http:"..."形式的子串。
<u><i>gopl.io/ch12/params</i></u>
```Go
gopl.io/ch12/params
// Unpack populates the fields of the struct pointed to by ptr
// from the HTTP request parameters in req.
func Unpack(req *http.Request, ptr interface{}) error {
@@ -135,6 +133,3 @@ max: strconv.ParseInt: parsing "lots": invalid syntax
**練習 12.12** 擴展成員標籤以表示一個請求參數的有效值規則。例如一個字符串可以是有效的email地址或一個信用卡號碼還有一個整數可能需要是有效的郵政編碼。脩改Unpack函數以檢査這些規則。
**練習 12.13** 脩改S表達式的編碼器§12.4和解碼器§12.6采用和encoding/json包§4.5類似的方式使用成員標籤中的sexpr:"..."字串。