go原生httpServer封装

main.go
package main
import (
	"log"
	"test/router"
)

func main() {
	r := router.NewServer("8080")
	if err := r.ListenAndServe(); err != nil {
		log.Fatal(err)
	}
}
router/router.go
package router

import (
	"fmt"
	"net/http"
	"test/controller"
	"time"
)
var RoutesMap map[string]string

func NewServer(port string) *http.Server {
	//创建Mux
	mux := http.NewServeMux()
	Routers(mux)
	server := &http.Server{
		Addr: ":"+port,
		Handler: mux, //注册处理器
		ReadTimeout: 10 * time.Second,
	}
	return  server
}

func Routers(mux *http.ServeMux)  {
	RoutesMap =make(map[string]string,0)
	RoutesMap["POST"] = "/hello"
	mux.HandleFunc("/hello", mid(controller.Hello))
}

func mid( handler func(w http.ResponseWriter, r *http.Request))  func(w http.ResponseWriter, r *http.Request){
	//如何获取拿到 w 和r两个参数
	return func (w http.ResponseWriter, r *http.Request) {
		defer func(){
			fmt.Println(recover())
		}()
		//中间件截取
		if r.Header.Get("token") != "123456"{
			w.Write([]byte("token有问题"))
			return
		}

		path, ok := RoutesMap[r.Method]
		if !ok {
			w.Write([]byte("method不存在"))
			return
		}
		if path != r.RequestURI {
			w.Write([]byte("path不存在"))
			return
		}
		handler(w,r)
	}
}



controller/hello.go
package controller

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func Hello(w http.ResponseWriter, r *http.Request) {
	body, _ := ioutil.ReadAll(r.Body) //读取
	fmt.Println(string(body))
	w.Write(body)//响应
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值