mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-11-01 10:41:35 +00:00
ch7: fix code format
This commit is contained in:
@@ -2,8 +2,8 @@
|
||||
|
||||
在第一章中,我們粗略的了解了怎麽用net/http包去實現網絡客戶端(§1.5)和服務器(§1.7)。在這個小節中,我們會對那些基於http.Handler接口的服務器API做更進一步的學習:
|
||||
|
||||
<u><i>net/http</i></u>
|
||||
```go
|
||||
net/http
|
||||
package http
|
||||
|
||||
type Handler interface {
|
||||
@@ -17,8 +17,8 @@ ListenAndServe函數需要一個例如“localhost:8000”的服務器地址,
|
||||
|
||||
想象一個電子商務網站,爲了銷售它的數據庫將它物品的價格映射成美元。下面這個程序可能是能想到的最簡單的實現了。它將庫存清單模型化爲一個命名爲database的map類型,我們給這個類型一個ServeHttp方法,這樣它可以滿足http.Handler接口。這個handler會遍歷整個map併輸出物品信息。
|
||||
|
||||
<u><i>gopl.io/ch7/http1</i></u>
|
||||
```go
|
||||
gopl.io/ch7/http1
|
||||
func main() {
|
||||
db := database{"shoes": 50, "socks": 5}
|
||||
log.Fatal(http.ListenAndServe("localhost:8000", db))
|
||||
@@ -55,8 +55,8 @@ socks: $5.00
|
||||
|
||||
目前爲止,這個服務器不考慮URL隻能爲每個請求列出它全部的庫存清單。更眞實的服務器會定義多個不同的URL,每一個都會觸發一個不同的行爲。讓我們使用/list來調用已經存在的這個行爲併且增加另一個/price調用表明單個貨品的價格,像這樣/price?item=socks來指定一個請求參數。
|
||||
|
||||
<u><i>gopl.io/ch7/http2</i></u>
|
||||
```go
|
||||
gopl.io/ch7/http2
|
||||
func (db database) ServeHTTP(w http.ResponseWriter, req *http.Request) {
|
||||
switch req.URL.Path {
|
||||
case "/list":
|
||||
@@ -114,8 +114,8 @@ no such page: /help
|
||||
|
||||
在下面的程序中,我們創建一個ServeMux併且使用它將URL和相應處理/list和/price操作的handler聯繫起來,這些操作邏輯都已經被分到不同的方法中。然後我門在調用ListenAndServe函數中使用ServeMux最爲主要的handler。
|
||||
|
||||
<u><i>gopl.io/ch7/http3</i></u>
|
||||
```go
|
||||
gopl.io/ch7/http3
|
||||
func main() {
|
||||
db := database{"shoes": 50, "socks": 5}
|
||||
mux := http.NewServeMux()
|
||||
@@ -154,8 +154,8 @@ func(w http.ResponseWriter, req *http.Request)
|
||||
|
||||
語句http.HandlerFunc(db.list)是一個轉換而非一個函數調用,因爲http.HandlerFunc是一個類型。它有如下的定義:
|
||||
|
||||
<u><i>net/http</i></u>
|
||||
```go
|
||||
net/http
|
||||
package http
|
||||
|
||||
type HandlerFunc func(w ResponseWriter, r *Request)
|
||||
@@ -169,8 +169,8 @@ HandlerFunc顯示了在Go語言接口機製中一些不同尋常的特點。這
|
||||
|
||||
因爲handler通過這種方式註冊非常普遍,ServeMux有一個方便的HandleFunc方法,它幫我們簡化handler註冊代碼成這樣:
|
||||
|
||||
<u><i>gopl.io/ch7/http3a</i></u>
|
||||
```go
|
||||
gopl.io/ch7/http3a
|
||||
mux.HandleFunc("/list", db.list)
|
||||
mux.HandleFunc("/price", db.price)
|
||||
```
|
||||
@@ -181,8 +181,8 @@ mux.HandleFunc("/price", db.price)
|
||||
|
||||
然後服務器的主函數可以簡化成:
|
||||
|
||||
<u><i>gopl.io/ch7/http4</i></u>
|
||||
```go
|
||||
gopl.io/ch7/http4
|
||||
func main() {
|
||||
db := database{"shoes": 50, "socks": 5}
|
||||
http.HandleFunc("/list", db.list)
|
||||
|
||||
Reference in New Issue
Block a user