首页 > Web开发 > 详细

httpserver支持路由传输控制器

时间:2019-07-28 21:59:30      阅读:103      评论:0      收藏:0      [点我收藏+]

技术分享图片

 技术分享图片

 

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))
}

 














 

httpserver支持路由传输控制器

原文:https://www.cnblogs.com/sunlong88/p/11260973.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!