美文网首页
Golang——net/http

Golang——net/http

作者: _羊羽_ | 来源:发表于2018-08-23 21:30 被阅读894次

    构建一个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 mux
    
    import (
        "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)
    
    }
    

    相关文章

      网友评论

          本文标题:Golang——net/http

          本文链接:https://www.haomeiwen.com/subject/hkqqtftx.html