sparrow

package module
v0.0.15 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 1, 2021 License: Apache-2.0 Imports: 0 Imported by: 0

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 使用 sqlxgo-sql-driver 作为mysql支持
    • redis
    • etcd
    • elasticsearch
    • websocket
    • ...

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

Documentation

Index

Constants

View Source
const (
	Version = "v0.0.15"
)

Variables

This section is empty.

Functions

This section is empty.

Types

This section is empty.

Directories

Path Synopsis
db
util
cmd
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL