Post

Go Web Framework Project

Go Web Framework Project

Web Framework Project

Introduction

  • 参考gin框架
  • 体现了框架设计的核心原则

Reason

  • net/http提供了基础的web功能, 但是还缺少了许多简单的功能

Function

  • 上下文Context
  • 动态路由
    • 前缀树 Trie Tree
  • 分组控制 Group
  • 中间件 Middlewares

Detail

net/http基础

  • Engine实现ServerHTTP方法(成为http.Handler)
  • Context拥有http.ResponseWrite和*http.Request

源码

1
2
3
4
5
6
7
8
9
// net/http 标准库
type Handler interface {
	ServeHTTP(ResponseWriter, *Request)
}
type HandlerFunc func(ResponseWriter, *Request)

func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
	f(w, r)
}

动态路由

  • 前缀树Trie Tree实现
  • 支持:filed*filed匹配

分组控制

  • path加上group prefix
  • 支持在分组上添加middlewares
  • engine也属于一个prefix为空的分组, 方便支持中间件

中间件 Middlewares

  • 中间件就是handleFunc, 它存在在group中, 在group执行注册的handleFunc前, 先执行自身所有中间件
    • c.Next()来执行中间件, 执行顺序
      • A Next前 -> B Next前 -> handleFunc -> B Next后 -> A Next后
  • 常用中间件
    • Authorize
    • Logger
    • Recover
    • Timeout
    • 熔断
    • 等等

错误恢复

  • go中的异常
    • error type
    • panic + recover
      • 类似捕获异常, defer recover
  • defer
    • 执行时间
      • return后, 函数结束前, 因此defer中的func可以拿到函数的返回值
    • 执行顺序
      • 最后的defer会先执行, 然后向上
This post is licensed under CC BY 4.0 by the author.