Flamego
Flamego是一个路由强大的Web框架,通过注入实现灵活的扩展。
基础
- 实例(实现了http.Handler接口)
- Flamego.Classic 经典实例,包含Recovery,Logger,Static三个中间件
- Flame.New
- 路由
- f.Get
- f.Group
- 启动
- f.Run(8000) : 默认2830
- f.Run(“127.0.0.1:2830”)
- http.ListenAndServe(“0.0.0.0:2830”,f)
- http.ListenAndServeTLS(“localhost:8888”, “certFile”, “keyFile”, f)
请求和响应流
路由支持多个处理器,通过Next()出让给下一个处理器。
Context上下文
flamego.Context
是请求上下文的容器,仅适用于路由层
支持的方法:
- Param()/ParamInt()/…
- Query()/QueryInt()/QueryStrings() : URL参数,支持设置默认值,其他借助于
c.Request().URL.Query()
- RemoteAddr() 客户端地址
- Redirect()
请求
获取请求带2种方式:
func(r *http.Request)
func(c flamego.Context)
c.Request()
是http.Request
的封装,提供了额外的辅助方法
// req.Body()
body := c.Request().Body().Bytes()
响应
两种获取方式:
- 处理器参数
w http.ResponseWriter
- 调用请求上下文
c.ResponseWriter()
处理器返回值可以是:
- 字符串、[]byte
- 字符串和error:如果error不为空,直接返回错误
用Render中间件渲染内容
f.Use(flamego.Renderer(
flamego.RenderOptions{
JSONIndent: " ",
},
))
f.Get("/", func(r flamego.Render) {
r.JSON(http.StatusOK,
map[string]interface{}{
"id": 1,
"username": "xulz",
},
)
})
中间件
部分官方中间件:
- session
- cache
- auth
- binding
- cors
日志
默认日系使用 *log.Logger
f.Get("/", func(log *log.Logger) {
log.Println("Hello, Flamego!")
})
Panic恢复
经典实例内置 flamego.Recovery()
Panic时会输出错误信息而不是崩溃.
静态资源
处理静态资源涉及两种用法:
- 本地静态目录
- 内嵌静态文件系统
// 示例值都是默认值
f.Use(flamego.Static(
flamego.StaticOptions{
Directory: "/public",
Index: "index.html",
Prefix: "",
},
内嵌文件系统:
限制:必须带文件夹路径访问URL
//go:embed css
var css embed.FS
f.Use(flamego.Static(
flamego.StaticOptions{
FileSystem: http.FS(css),
},
))
自定义服务
可以为处理器增加注入服务,已内置于flamego.Flame和flamego.Context。 两种注入方式:
- Map(具体的类型或接口)
- MapTo: 注入为其实现的某一接口的方法
注入服务
全局服务
- Flame实例的Map或MapTo
- Use在全局中间件中注入
组级服务
f.Group()被组内所有路由器的处理器使用
路由级服务
仅该路由绑定的处理器使用
重载服务
可重载已注入的服务变更服务的状态或行为。