構建一個web
在瀏覽器輸入http://localhost:8080
import ( "net/http" "fmt" "log")func sayhelloGolang(w http.ResponseWriter, r *http.Request) { r.ParseForm() //解析參數,預設是不會解析的 fmt.Println("path", r.URL.Path) w.Write([]byte("Hello Golang"))}func main() { http.HandleFunc("/", sayhelloGolang) //設定訪問的路由 err := http.ListenAndServe(":8080", nil) //設定監聽的連接埠 if err != nil { log.Fatal("ListenAndServe: ", err) }}
繼承ServeHTTP
type BaseHander struct { }func (hander *BaseHander)ServeHTTP(resp http.ResponseWriter,req *http.Request){ fmt.Println("url path=>",req.URL.Path) fmt.Println("url param a =>",req.URL.Query().Get("a")) resp.Write([]byte("hello world"))}func main() { http.ListenAndServe(":8080",&BaseHander{});}
net/http 路由
package muximport ( "net/http")type muxHandler struct { handlers map[string]http.Handler handleFuncs map[string]func(resp http.ResponseWriter, req *http.Request)}func NewMuxHandler() *muxHandler { return &muxHandler{ make(map[string]http.Handler), make(map[string]func(resp http.ResponseWriter, req *http.Request)), }}func (handler *muxHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) { urlPath := req.URL.Path if hl, ok := handler.handlers[urlPath]; ok { hl.ServeHTTP(resp, req) return } if fn, ok := handler.handleFuncs[urlPath]; ok { fn(resp, req) return } http.NotFound(resp, req)}func (hander *muxHandler) Handle(pattern string, hl http.Handler) { hander.handlers[pattern] = hl}func (handler *muxHandler) HandleFunc(pattern string, fn func(resp http.ResponseWriter, req *http.Request)) { handler.handleFuncs[pattern] = fn}
var ( port string)func main() { flag.StringVar(&port, "port", ":8080", "port to listen") flag.Parse() router :=mux.NewMuxHandler() router.Handle("/hello/golang/", &BaseHander{}) router.HandleFunc("/hello/world", func(resp http.ResponseWriter, req *http.Request) { resp.Write([]byte("hello world")) }) http.ListenAndServe(port, router)}