/kratos-examples

Go 微服务框架 Kratos(Bilibili开源)最佳实践。封装常用工具,以满足实际开发工作中的需求,提升开发效率。

Primary LanguageGo

kratos-examples

Go微服务框架Kratos(Bilibili开源)最佳实践。封装常用工具,以满足实际开发工作中的需求,提升开发效率。

彦祖,给个Star

和kratos官方examples项目的区别

  1. 官方的示例比较简单,实际开发工作中,需要更完善的功能。
  2. 官方的示例仅仅是针对某一个功能的示例,实际工作中,往往需要自己整合。

示例项目

  1. backup-db: 定时任务示例,根据cron表达式定时执行。
  2. user-manage: 微服务示例,基本的CRUD,参数校验,分页查询,数据库变更自管理。

具体功能

  1. kratos框架的基本使用,常用功能的封装
    1. 封装配置读取、校验
    2. 日志组件初始化
    3. 配置链路追踪,将 trace_id 写入响应头里,可用于返回 trace_id 给前端,方便定位日志
    4. http返回错误信息处理,隐藏500以上的错误,避免底层错误暴露给调用者
    5. 重新实现kratos的log.Fatal(),log.Fatal()内部调用os.Exit(),会造成defer函数无法执行,改为调用panic
    6. 响应枚举值配置,请求响应枚举值的数字
    7. 通过protoc-gen-validate实现参数校验
  2. 利用反射,高效处理响应值里的time类型字段,转换为Protocol Buffer的timestamp类型
  3. 基于Google API规范定义API接口
  4. 使用FieldMask,解决golang更新零值问题
  5. 使用FieldMask,解决接口响应字段超出客户端所需,造成带宽浪费,还可避免执行不必要的业务逻辑
  6. 使用golang-migrate ,在服务启动时维护数据库变更,自动执行初始化SQL,详细介绍
  7. 通过grom操作postgres数据库
    1. 封装gorm的辅助工具类,提供了基础的CRUD方法,通过泛型实现。 命名参照mybatisplus的mapper
    2. 使用BeforeCreate钩子函数,自动生成id
    3. 封装分页查询操作
    4. 使用可选函数封装数据库连接初始化
  8. gitlab ci/cd 流水线脚本包含以下功能, 详细介绍见Gitlab CI/CD 实践四:Golang 项目 CI/CD 流水线配置
    • 单元测试
    • 代码检查
    • 构建镜像
    • 推送镜像到镜像私仓
    • 部署应用到k8s
  9. logrus日志库
  10. cron定时任务
  11. protobuf定义配置文件
  12. 通过protoc-gen-validate实现配置文件校验
  13. wire依赖注入
  14. 常用脚本封装到Makefile
  15. k8s存活探针接口,日志过滤
  16. bytedance的协程池
  17. golangci-lint代码检查
  18. 打包镜像