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 := 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){
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)
}