美文网首页
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