package main import ( "net/http" "com.jtthink.net/myhttpserver/core" ) type MyHandler struct { } func(*MyHandler) ServeHTTP(writer http.ResponseWriter, request *http.Request){ writer.Write([]byte("hello,myhandler")) } func main() { router:=core.DefaultRouter() router.Get("/", func(ctx *core.MyContext) { ctx.WriteString("my string GET") }) router.Post("/", func(ctx *core.MyContext) { ctx.WriteString("my string POST") }) http.ListenAndServe(":8099",router) }
package core import ( "net/http" ) type MyHandlerFunc func(ctx *MyContext) type MyRouter struct { Mapping map[string]map[string]MyHandlerFunc Ctx *MyContext } func DefaultRouter() *MyRouter { return &MyRouter{make(map[string]map[string]MyHandlerFunc),&MyContext{}} } func(this *MyRouter) Get(path string,f MyHandlerFunc) { if this.Mapping["GET"]==nil{ this.Mapping["GET"]=make(map[string]MyHandlerFunc) } this.Mapping["GET"][path]=f } func(this *MyRouter) Post(path string,f MyHandlerFunc) { if this.Mapping["POST"]==nil{ this.Mapping["POST"]=make(map[string]MyHandlerFunc) } this.Mapping["POST"][path]=f } func(this *MyRouter) ServeHTTP(writer http.ResponseWriter, request *http.Request){ this.Ctx.request=request this.Ctx.ResponseWriter=writer //chrome 会默认请求图标地址 if f,OK:=this.Mapping[request.Method][request.URL.Path];OK{ f(this.Ctx) } }
package core import "net/http" type MyContext struct { //上下文对象 request *http.Request http.ResponseWriter } func(this *MyContext) WriteString(str string){ this.Write([]byte(str)) }