mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-10-27 16:41:36 +00:00
ch12: fix code path
This commit is contained in:
@@ -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:"..."字串。
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user