zoukankan      html  css  js  c++  java
  • httpserver实现简单的上下文

    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)
    
    
    
    
    
    }
    main.go
    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)
         }
    
    
    
    }
    MyRouter.go
    package core
    
    import "net/http"
    
    type MyContext struct { //上下文对象
          request *http.Request
          http.ResponseWriter
    }
    func(this *MyContext) WriteString(str string){
        this.Write([]byte(str))
    }
    MyContext.go
  • 相关阅读:
    电脑能ping127.0.0.1但是ping不通本机ip
    用iis调试源代码
    pl登录提示服务不存在
    sqlserver保留一位小数(不是四舍五入)
    web应用程序与web网站发布时区别
    java的覆盖重写隐藏和C#中的不同
    导出word
    点击登录提交两次的问题
    oracle通过plsql代码倒库
    apply方法自解
  • 原文地址:https://www.cnblogs.com/sunlong88/p/11260434.html
Copyright © 2011-2022 走看看