美文网首页
手把手教媳婦-封裝簡易的http路由(一)

手把手教媳婦-封裝簡易的http路由(一)

作者: 牛空空 | 来源:发表于2020-07-23 14:12 被阅读0次

午休睡不着,教我媳婦頓修封裝個簡易的http路由,實現簡單的GET,POST,DELETE,PUT方法了

package main

import (
    "fmt"
    "log"
    "net/http"
)

type route interface {
    GET(string, http.HandlerFunc)
    POST(string, http.HandlerFunc)
    DELETE(string, http.HandlerFunc)
    PUT(string, http.HandlerFunc)
}

type Test struct {
    handlers map[string]map[string]http.HandlerFunc
}

func NewTest() *Test {

    return &Test{
        handlers: make(map[string]map[string]http.HandlerFunc),
    }

}

func (t *Test) GET(path string, f http.HandlerFunc) {

    if _, ok := t.handlers["GET"]; ok {

        t.handlers["GET"][path] = f
    } else {
        t.handlers["GET"] = make(map[string]http.HandlerFunc)
        t.handlers["GET"][path] = f
    }

}
func (t *Test) POST(path string, f http.HandlerFunc) {

    if _, ok := t.handlers["POST"]; ok {

        t.handlers["POST"][path] = f
    } else {
        t.handlers["POST"] = make(map[string]http.HandlerFunc)
        t.handlers["POST"][path] = f
    }
}
func (t *Test) DELETE(path string, f http.HandlerFunc) {

    if _, ok := t.handlers["DELETE"]; ok {

        t.handlers["DELETE"][path] = f
    } else {
        t.handlers["DELETE"] = make(map[string]http.HandlerFunc)
        t.handlers["DELETE"][path] = f
    }
}
func (t *Test) PUT(path string, f http.HandlerFunc) {

    if _, ok := t.handlers["PUT"]; ok {

        t.handlers["PUT"][path] = f
    } else {
        t.handlers["PUT"] = make(map[string]http.HandlerFunc)
        t.handlers["PUT"][path] = f
    }
}

func (t *Test) ServeHTTP(w http.ResponseWriter, r *http.Request) {

    fmt.Println(r.Method)
    fmt.Println(r.RequestURI)

    if f, ok := t.handlers[r.Method][r.RequestURI]; ok {

         f(w, r)
    } else {
        w.WriteHeader(404)
        w.Write([]byte("not found"))

    }

}

func (t *Test) Run(addr string) {

    err := http.ListenAndServe(addr, t)

    if err != nil {
        log.Fatal(err)
        panic(err)
    }

}

測試

 t := NewTest()

     t.GET("/todo", func(writer http.ResponseWriter, request *http.Request) {

        writer.Write([]byte("todo"))

     })

    t.POST("/foo", func(writer http.ResponseWriter, request *http.Request) {

        writer.Write([]byte("foo"))

    })

    t.Run(":8080")

ps:功能比較單一,也不支持路徑參數,參數驗證等,以後再去自行擴展了

相关文章

  • 手把手教媳婦-封裝簡易的http路由(一)

    午休睡不着,教我媳婦頓修封裝個簡易的http路由,實現簡單的GET,POST,DELETE,PUT方法了 測試 p...

  • 手把手教媳婦-封裝簡易的http路由(二)

    我媳妇觉得还是可以继续改进,那就继续改进下吧,将rest方法,简化下,然后http.ResponseWriter,...

  • 散步

    晚上,和她在操場散步,很開心。 〝媳婦兒?〞 〝嗯?誰是你媳婦兒呀〞 〝媳婦兒。〞 〝你叫我干嘛。〞 。。。 談話...

  • 牙醫媳婦

    春節期間找餐廳都得早點訂位 。兒子媳婦都是美食家 ,連回到高雄都會安排在地美食品嚐 。 大年初三 ,我們在漢神巨蛋...

  • 媳婦難當——讀通札記(1769)

    讀文白對照本《資治通鑒》之《卷170》,感:1、媳婦難當。通覽歷史,俯瞰古今,婆婆多了,媳婦難當。竊以為是。史載如...

  • 人总是不满足

    人總是不滿足。 你有一個兒媳婦,你會嫌兒媳婦不懂事情; 你有一個女兒,你希望女兒在婆家能夠掌管婆家的大權; 你開車...

  • 五月桂花香

    世上女人無論多丑在懷孕的時候總是最美的,錢楓心裡正是笑得最燦爛的時候,因為他的媳婦懷孕了。本來與母親的不快和媳婦的...

  • 班级卫生管理的一波三折(陈莉萍)

    师生一起打扫 手把手教做 几易新规 辩论明理

  • 傳習

    好的學不會,灰的不用教。 六十年代,有一外地媳婦說她的老娘不好。 文化人說起來跟講故事一樣。丈夫是上班人,因為是家...

  • Python + Selenium 實現 web 自動化(1)-

    環境準備 詳細內容可以點上面 [環境準備] 連結, 下面記錄簡易的步驟及遇到的問題 一、 安裝 Python 去 ...

网友评论

      本文标题:手把手教媳婦-封裝簡易的http路由(一)

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