j
jaryue
V1
2023/03/18阅读:13主题:默认主题
gowebday4
实现基础的gee http框架
package gee
// go大写表示可以被外界访问
import (
"fmt"
"net/http"
)
// 定义hand函数,处理请求
type Handlerfunc func(http.ResponseWriter, *http.Request)
// 定义结构体实现函数hand
type Engin struct {
router map[string]Handlerfunc
}
// 初始化engin
func New() *Engin {
return &Engin{router: make(map[string]Handlerfunc)}
}
// 添加路由映射
func (engin *Engin) addroute(method string, pettern string, hander Handlerfunc) {
key := method + "-" + pettern
//
engin.router[key] = hander
}
// 定义get方法
func (engin *Engin) GET(pattern string, handler Handlerfunc) {
engin.addroute("GET", pattern, handler)
}
// 定义post方法;参数:一个是 路径字段,一个是处理函数
func (engin *Engin) POSE(pattern string, handler Handlerfunc) {
// 调用add函数添加路由映射
engin.addroute("POST", pattern, handler)
}
// ---------------------------------------------
// 定义serve函数
func (engin *Engin) ServeHTTP(w http.ResponseWriter, req *http.Request) {
// 查找映射字段
key := req.Method + "-" + req.URL.Path
if handler, ok := engin.router[key]; ok { //查找成功成功就执行hander函数
handler(w, req)
} else { //失败就返回404
fmt.Fprintf(w, "404 NOT FOUND: %s\n", req.URL)
}
}
// 启动http服务;监听addr端口,并执行engin接口,当用户访问,执行servehttp函数
func (engin *Engin) Run(addr string) (err error) {
return http.ListenAndServe(addr, engin)
}
之前我们写到我们可以用servehttp函数来定义用户处理函数,但是我们需要用swich,case语句来定义访问的路径,也能实现功能 而用这个addroute方法将路径添加到映射中,value就是处理的函数,就是说当用户访问路径的时候就会直接映射出处理的函数,这样当处理函数很多的时候就不用一个个的case了,维护起来也相对方便一点
作者介绍
j
jaryue
V1