美文网首页
Go语言基于Gin微服务快速开发脚手架

Go语言基于Gin微服务快速开发脚手架

作者: 叛逆点起一根烟 | 来源:发表于2023-08-12 00:55 被阅读0次

    1. 安装

    版本要求: go 1.19+

    go get -u github.com/loebfly/ezgin
    

    2. 配置

    参考ezgin/template目录下的配置文件

    3. 概览

    • ezgin (服务启动、优化退出、gin封装)
    • ezlogs (日志模块)
    • ezdb (数据库模块)
    • ezcfg (配置模块)
    • ezi18n (国际化模块)
    • ezgo (安全携程模块)
    • ezcache (内存缓存模块)
    • ezcall (微服务调用模块)

    4. 示例

    4.1 ezgin

    package main
    
    import (
        "github.com/gin-gonic/gin"
        "github.com/loebfly/ezgin"
        "github.com/loebfly/ezgin/app"
        "github.com/loebfly/ezgin/engine"
        swaggerFiles "github.com/swaggo/files"
        ginSwagger "github.com/swaggo/gin-swagger"
        "net/http"
    )
    
    func main() {
        // 服务启动
        ezgin.Start(app.Start{
            YmlPath: "ezgin.yml", // 默认程序同级目录下的同名yml文件
            GinCfg: app.GinCfg{
                RecoveryHandler: func(c *gin.Context, err interface{}) {
                    // 自定义程序崩溃错误处理
                    c.JSON(http.StatusOK, i18n.SystemError.ErrorRes())
                },
                NoRouteHandler: func(c *gin.Context) {
                    // 自定义404处理
                    c.JSON(http.StatusOK, i18n.UrlNotFound.ErrorRes())
                }
            },
        })
        /* 业务区域 */
        // 如路由注册
        ezgin.GET("/ping", func(c *gin.Context) engine.Result[any] {
            return i18n.Success.Result("pong")
        })
        
        /* 业务区域 */
    
        // 服务异常退出时 优雅关闭服务
        ezgin.ShutdownWhenExitSignal()
    }
    

    4.2 ezlogs

    package main
    
    import (
        "github.com/loebfly/ezgin/ezlogs"
    )
    
    func main() {
        // {} 为占位符,后面的参数为占位符对应的值
        ezlogs.Debug("debug:{}", "hello, world")
        ezlogs.Info("info:{}", "hello, world")
        ezlogs.Warn("warn:{}", "hello, world")
        ezlogs.Error("error:{}", "hello, world")
    }
    
    

    4.3 ezdb

    package main
    
    import (
        "github.com/loebfly/ezgin/ezdb"
        "github.com/loebfly/ezgin/ezlogs"
        "github.com/loebfly/ezgin/internal/dblite/kafka"
    )
    
    func main() {
        mysqlDb, err := ezdb.Mysql()
        if err != nil {
            ezlogs.Error("mysql 连接错误 error:{}", err)
            return
        }
        ezlogs.Info("mysql 连接获取成功")
    
        mongoDb, returnDB, err := ezdb.Mongo()
        if err != nil {
            ezlogs.Error("mongo 连接错误 error:{}", err)
            return
        }
        defer returnDB(mongoDb)
        ezlogs.Info("mongo 连接获取成功")
    
        redisDb, err := ezdb.Redis()
        if err != nil {
            ezlogs.Error("redis db 连接错误 error:{}", err)
            return
        }
        ezlogs.Info("redis db 连接获取成功")
    
        kafkaDb, err := ezdb.Kafka()
        if err != nil {
            ezlogs.Error("kafka 连接错误 error:{}", err)
            return
        }
        ezlogs.Info("kafka 连接获取成功")
    
    }
    

    4.4 ezcfg

    package main
    
    import (
        "github.com/loebfly/ezgin/ezcfg"
        "github.com/loebfly/ezgin/ezlogs"
    )
    
    func main() {
        // 获取配置
        cfg := ezcfg.GetString("ezgin.app.name")
        ezlogs.Info("ezgin.app.name:{}", cfg)
    }
    

    4.5 ezi18n

    package main
    
    import (
        "github.com/loebfly/ezgin/ezi18n"
        "github.com/loebfly/ezgin/ezlogs"
    )
    
    func main() {
        translate := ezi18n.StringId("messageId").GetTranslate()
        ezlogs.Info("translate:{}", translate)
    }
    

    4.6 ezgo

    package main
    
    import (
        "github.com/loebfly/ezgin"
        "github.com/loebfly/ezgin/ezgo"
        "github.com/loebfly/ezgin/ezlogs"
    )
    
    func main() {
        // 安全携程
        safeGo := ezgo.New[string](func(args ...any) {
            ezlogs.Debug("args:{}", args)
        })
        safeGo.SetGoBeforeHandler(func() string {
            return ezgin.MWTrace.GetCurRoutineId()
        })
        safeGo.SetGoAfterHandler(func(params string) {
            ezgin.MWTrace.CopyPreHeaderToCurRoutine(params)
        })
        safeGo.Run("hello", "world")
    }
    

    4.7 ezcache

    package main
    
    import (
        "github.com/loebfly/ezgin/ezcache"
        "github.com/loebfly/ezgin/ezlogs"
    )
    
    func main() {
        // 设置缓存
        ezcache.Table("ezgin").Add("key", "value", 0)
        // 获取缓存
        ezcache.Table("ezgin").Get("key")
    }
    

    4.8 ezcall

    package main
    
    import (
        "github.com/loebfly/ezgin/engine"
        "github.com/loebfly/ezgin/ezcall"
        "github.com/loebfly/ezgin/ezlogs"
    )
    
    func main() {
        // 调用微服务
        //  1. form: 适用于form表单提交的接口
        res := ezcall.FormGetToResult[string]("微服务名称", "接口地址", map[string]string{
            "参数key": "参数值",
        })
        ezlogs.Info("res:{}", res)
    
        // 2. json: 适用于json格式的接口
        res := ezcall.JsonToResult[string](engine.Get, "微服务名称", "接口地址", map[string]string{
            "参数key": "参数值",
        }, nil)
        ezlogs.Info("res:{}", res)
        // 3. restful: 适用于restful风格的接口
        res := ezcall.RestfulToResult[string](engine.Get, "微服务名称", "接口地址", map[string]string{
            "路径key": "路径值",
            }, map[string]string{"参数key": "参数值"}, nil)
        ezlogs.Info("res:{}", res)
        // 4. 通用调用
        opt := ezcall.FormOptions{}
        //opt := ezcall.JsonOptions{}
        //opt := ezcall.RestfulOptions{}
        res := ezcall.RequestToResult[string](opt)
        ezlogs.Info("res:{}", res)
    }
    
    

    相关文章

      网友评论

          本文标题:Go语言基于Gin微服务快速开发脚手架

          本文链接:https://www.haomeiwen.com/subject/blhxmdtx.html