go web編程由淺入深3——用我們自定義的Server

還記得之前有個http.ListenAndServe嗎,現在來看看它的定義:

func ListenAndServe(addr string, handler Handler) error {
	server := &Server{Addr: addr, Handler: handler}
	return server.ListenAndServe()
}

可以看出,原來內部是實現了一個Server結構體,然後調用這個結構體對象的ListenAndServe函數。下面我們就自己來實現一個Server並用我們自定義的Server來實現一個HTTP服務,代碼如下:

package main

import (
	"io"
	"net/http"
)

func main () {
	mux := http.NewServeMux()
	mux.HandleFunc("/hi", sayHi)

	myServer := &http.Server{
		Addr: "127.0.0.1:8080",
		Handler: &MyHandler{mux},
	}
	//myServer.
	myServer.ListenAndServe()
}

type MyHandler struct {
	Mux *http.ServeMux
}

func (mh *MyHandler)ServeHTTP(w http.ResponseWriter, r *http.Request) {
	mh.Mux.ServeHTTP(w, r)
}

func sayHi(w http.ResponseWriter, r *http.Request) {
	io.WriteString(w, "hi, this is cutom server")
}

到此,go web編程的第一階段探索就到此告一段落。總結一下:

(1)可以用net庫底層的默認ServeMux對象實現路由,我們只需要寫好url路徑的處理函數註冊進去就可以了;

(2)我們自定義ServerMux對象,並實現ServeHTTP接口,同時可以自定義url路徑處理函數。

(3)我們自定義Server對象,並調用該對象的ListenAndServe接口實現HTTP服務。

三種情景由淺入深自定義了HTTP服務的部分服務。

(全文完)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章