# README
sparrow
sparrow 是一个基于 gin
的 restful api 风格的 web 框架
框架特色
原生兼容 gin
框架,该框架主要减少日常开发时搭框架的工作量; sparrow 内部提供了大量的开箱即用的功能,避免开发进行复杂来实现各个组件的配合。
sparrow 在提供减少配置的复杂性时,会保证避免对使用的开源组件的源码修改,从而保证框架可以使用各个开源组件的最新版本。
sparrow 注重提供减少开发者的工作量, 但是不限制开发者编码的自由, 也就是说sparrow会提供便利的配置,但是用不用你自己决定。
功能列表
-
快速生成项目结构(restful 风格)
-
对系统信号处理的支持
- 支持http server优化关闭(通过命令行操作)
- 支持http server优雅重启(通过命令行操作)
- ...
-
命令行参数支持
- 使用
cobra
实现命令行参数支持 - 支持查看当前http连接数
- 使用
-
常用中间件
- 对panic和web访问日志记录写到框架里面内置中间件支持
- 对其他中间件以第三方包支持
-
日志
- 使用
zap
实现日志支持 - 使用
lumberjack
对日志进行切割管理
- 使用
-
配置读取
- 支持 code 和 file 2种方式,配置框架
- 配置文件方面使用 viper实现支持
-
常用组件支持(以第三方包的形式发布)
- mysql 使用
sqlx
和go-sql-driver
作为mysql支持 - redis
- etcd
- elasticsearch
- websocket
- ...
- mysql 使用
sparrow的目标就是:尽量平衡自由和规范的界限,既可以让开发者减少开发工作量和开发心智负担,同时开发者有自由组合的权利;当然这是个美好的愿望,希望能实现. 😁😁😁
示例程序
安装 sparrow
go get -u github.com/twgcode/sparrow
main.go 代码如下:
/**
@Author: wei-g
@Date: 2020/6/19 5:33 下午
@Description:
*/
package main
import (
"fmt"
"net/http"
"github.com/twgcode/sparrow/framework"
"github.com/twgcode/sparrow/util/data"
"github.com/twgcode/sparrow/util/log"
"github.com/fsnotify/fsnotify"
"github.com/gin-gonic/gin"
"github.com/spf13/cobra"
)
var (
err error
mgr = &MGR{}
)
type MGR struct {
Name string
}
func run(cmd *cobra.Command, args []string) (err error) {
framework.UseDefaultMiddleware(false)
framework.Sparrow.Engine.GET("/", RootHandle)
framework.Engine.GET("/1", RootHandle)
framework.Engine.GET("/p", PanicHandle)
fmt.Println(mgr.Name)
return
}
func main() {
cfg := framework.CallSparrowCfg{
Use: "examples",
Short: "sparrow 示例项目",
Long: "sparrow 示例项目, 用来演示 sparrow的新特性 🎉 🎉 🎉",
Version: "v0.0.1",
CallerRun: run,
CmdCfg: true,
CallOnConfigChange: func(e fsnotify.Event) {
// 配置文件发生变更之后会调用的回调函数
framework.Sparrow.ConfigConf.Unmarshal(mgr)
fmt.Println("Config file changed:", mgr.Name)
log.Info(mgr.Name)
},
CallRawVal: mgr,
CallDecoderConfigOption: nil,
CfgType: framework.FileType,
SparrowCfg: nil,
}
if err = framework.ConfigApp(&cfg); err != nil {
panic(err)
}
err = framework.Execute()
fmt.Println("====== end ======")
fmt.Println(err)
}
func RootHandle(c *gin.Context) {
c.JSON(http.StatusOK, data.SucJson("root /"))
}
func PanicHandle(c *gin.Context) {
panic("PanicHandle PanicHandle PanicHandle PanicHandle PanicHandle PanicHandle")
}
在项目目录下执行以下命令:
# 整理项目依赖
go mod tidy
# 编译项目
go build
# Packages
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Constants
No description provided by the author