0
点赞
收藏
分享

微信扫一扫

httpserver支持路由传输控制器

独兜曲 2022-05-13 阅读 54

httpserver支持路由传输控制器_.net

 httpserver支持路由传输控制器_chrome_02


main.go

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.Add("/",&NewsController{})


http.ListenAndServe(":8099",router)


}


NewsController.go
package main

import "com.jtthink.net/myhttpserver/core"

type NewsController struct {
core.MyController
}

func(this *NewsController) GET() {
this.Ctx.WriteString("this is newscontroller")
}

func(this *NewsController) POST() {
this.Ctx.WriteString("this is newscontroller for POST")
}


MyRouter.go
package core

import (
"net/http"
)
type MyHandlerFunc func(ctx *MyContext)
type MyRouter struct {
Mapping map[string]ControllerInterface

}

func DefaultRouter() *MyRouter {
return &MyRouter{make(map[string]ControllerInterface)}
}
//加入 path 和Controller的对应关系
func(this *MyRouter) Add(path string,c ControllerInterface) {
this.Mapping[path]=c
}

func(this *MyRouter) ServeHTTP(writer http.ResponseWriter, request *http.Request){
//chrome 会默认请求图标地址
if f,OK:=this.Mapping[request.URL.Path];OK{
f.Init(&MyContext{request,writer}) //关键代码
if request.Method=="GET"{//没有做防错处理
f.GET()
}
if request.Method=="POST"{//没有做防错处理
f.POST()
}
}




}


MyController.go
package core

type MyController struct {
Ctx *MyContext
}

func(this *MyController) Init (ctx *MyContext) {
this.Ctx=ctx
}

type ControllerInterface interface {
Init(ctx *MyContext)
GET()
POST()
}



MyContext.go
package core

import "net/http"

type MyContext struct { //上下文对象
request *http.Request
http.ResponseWriter
}
func(this *MyContext) WriteString(str string){
this.Write([]byte(str))
}



举报

相关推荐

0 条评论