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

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

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

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

package main

import "net/http"

type Context struct {
    http.ResponseWriter
    *http.Request
}

type Handler func(*Context)

router修改下

package main

import (
    "log"
    "net/http"
)

type Router interface {
    GET(string, Handler)
    POST(string, Handler)
    DELETE(string, Handler)
    PUT(string, Handler)
}

type Kevin struct {
    handlers map[string]map[string]Handler
}

func NewKevin() *Kevin {

    return &Kevin{
        handlers: make(map[string]map[string]Handler),
    }

}

func (t *Kevin) GET(path string, h Handler) {

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

        t.handlers["GET"][path] = h
    } else {
        t.handlers["GET"] = make(map[string]Handler)
        t.handlers["GET"][path] = h
    }

}
func (t *Kevin) POST(path string, h Handler) {

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

        t.handlers["POST"][path] = h
    } else {
        t.handlers["POST"] = make(map[string]Handler)
        t.handlers["POST"][path] = h
    }
}
func (t *Kevin) DELETE(path string, h Handler) {

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

        t.handlers["DELETE"][path] = h
    } else {
        t.handlers["DELETE"] = make(map[string]Handler)
        t.handlers["DELETE"][path] = h
    }
}
func (t *Kevin) PUT(path string, h Handler) {

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

        t.handlers["PUT"][path] = h
    } else {
        t.handlers["PUT"] = make(map[string]Handler)
        t.handlers["PUT"][path] = h
    }
}

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

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

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

    }

}

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

    err := http.ListenAndServe(addr, t)

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

}

测试

package main

func main() {

    r := NewKevin()

    r.GET("/todo", func(ctx *Context) {

        ctx.ResponseWriter.Write([]byte("todo"))

    })

    r.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/opjjlktx.html