当前位置: 首页 > news >正文

Gin项目脚手架与标配组件

文章目录

    • 前言
    • 设计思想和原则
    • ✨ 技术栈
    • 视频实况教程
    • sponge 内置了丰富的组件(按需使用)
    • 几个标配
    • 常用组件
    • 主要技术点
    • 另一个
    • 参考链接

前言

软件和汽车一样,由多个重要零部件组装而成。
本文堆积了一些常用部件,还没来得及好好整理。先放着。
神兵利器虽多,总归还是要组装一个自己的才放心。

设计思想和原则

框架中用到的设计思想和原则,尽量满足 “高内聚、低耦合”,主要遵从下面几个原则

    1. 单一职责原则
    1. 基于接口而非实现编程
    1. 依赖注入
    1. 多用组合
    1. 迪米特法则

迪米特法则: 不该有直接依赖关系的类之间,不要有依赖;有依赖关系的类之间,尽量只依赖必要的接口

✨ 技术栈

  • 框架路由使用 Gin 路由
  • 中间件使用 Gin 框架的中间件
  • 数据库组件 GORM
  • 文档使用 Swagger 生成
  • 配置文件解析库 Viper
  • 使用 JWT 进行身份鉴权认证
  • 校验器使用 validator 也是 Gin 框架默认的校验器
  • 任务调度 cron
  • 包管理工具 Go Modules
  • 测试框架 GoConvey
  • CI/CD GitHub Actions
  • 使用 GolangCI-lint 进行代码检测
  • 使用 make 来管理 Go 工程
  • 使用 shell(admin.sh) 脚本来管理进程
  • 使用 YAML 文件进行多环境配置

另一份整理的清单:

  1. Gin: 轻量级Web框架,自称路由速度是golang最快的
  2. GORM: ORM工具。本项目需要配合Mysql使用
  3. Gin-Session: Gin框架提供的Session操作工具
  4. Go-Redis: Golang Redis客户端
  5. godotenv: 开发环境下的环境变量工具,方便使用环境变量
  6. Gin-Cors: Gin框架提供的跨域中间件
  7. httpexpect: 接口测试工具
  8. 自行实现了国际化i18n的一些基本功能
  9. 本项目是使用基于cookie实现的session来保存登录状态的,如果需要可以自行修改为token验证

视频实况教程

让我们写个G站吧!Golang全栈编程实况

sponge 内置了丰富的组件(按需使用)

组件使用示例
Web 框架 gingin 示例
gin 中间件示例
RPC 框架 gRPCgRPC 示例
gRPC 拦截器示例
配置解析 viper示例
日志 zap示例
ORM 框架 gorm, mongo-go-drivergorm 示例
mongodb 示例
缓存 go-redis, ristrettogo-redis 示例
ristretto 示例
自动化api文档 swagger, protoc-gen-openapiv2-
鉴权 jwtjwt 示例
gin 示例
gRPC 示例
校验 validator, protoc-gen-validatevalidator 示例
protoc-gen-validate 示例
Websocket gorilla/websocket示例
定时任务 cron示例
消息队列 rabbitmq, kafkarabbitmq 示例
kafka 示例
分布式事务管理器 dtmdtm 服务发现示例
使用 dtm 秒杀抢购示例
分布式锁 dlock示例
自适应限流 ratelimitgin 示例
gRPC 示例
自适应熔断 circuitbreakergin 示例
gRPC 示例
链路追踪 opentelemetrygin 示例
gRPC 示例
跨服务链路追踪示例
监控 prometheus, grafanagin 示例
gRPC 示例
web 和 gRPC 监控示例
服务注册与发现 etcd, consul, nacos服务注册示例
服务发现示例
自适应采集 profile示例
资源统计 gopsutil示例
配置中心 nacos示例
代码质量检查 golangci-lint-
持续集成部署 CI/CD kubernetes, docker, jenkins示例
生成项目业务架构图 spograph示例
生成自定义代码 go templatejson 示例
sql 示例
protobuf 示例
AI助手 DeepSeek, ChatGPT, Gemini示例

## 使用Singo开发的项目实例

仿B站的G站:https://github.com/Gourouting/giligili

Singo框架为移动端提供Token登录的案例: https://github.com/bydmm/singo-token-exmaple

几个标配

  • Gin: https://github.com/gin-gonic/gin
  • Gorm: https://github.com/go-gorm/gorm
  • Wire: https://github.com/google/wire
  • Viper: https://github.com/spf13/viper
  • Zap: https://github.com/uber-go/zap
  • Golang-jwt: https://github.com/golang-jwt/jwt
  • Go-redis: https://github.com/go-redis/redis
  • Testify: https://github.com/stretchr/testify
  • Sonyflake: https://github.com/sony/sonyflake
  • Gocron: https://github.com/go-co-op/gocron
  • Go-sqlmock: https://github.com/DATA-DOG/go-sqlmock
  • Gomock: https://github.com/golang/mock
  • Swaggo: https://github.com/swaggo/swag
  • Pitaya: https://github.com/topfreegames/pitaya
  • Casbin: https://github.com/casbin/casbin

常用组件

主要技术点

  1. 认证使用jwt,双token模式(accessToken、refreshToken)
  2. 数据库操作使用gorm
  3. 限流使用令牌桶
  4. 用户id生成使用的是雪花算法
  5. 日志管理使用zap
  6. 配置文件管理使用viper
  7. 代码热监听使用air
  8. 接口文档生成使用swagger
  • 提供 gin 框架项目模版
  • 支持 HTTP 和 gRPC 双协议服务
    • 可通过配置启用/禁用 gRPC 服务
    • 统一的 API 定义和实现
    • 支持 gRPC 健康检查和反射服务
  • 使用 Uber fx 框架进行依赖注入,实现更清晰的代码结构
  • 采用标准 MVC 架构,遵循关注点分离原则
  • 集成 GORM 进行 ORM 映射和数据库操作
    • 支持 PostgreSQL (使用 pgx 驱动)
    • 支持 MySQL
    • 支持 SQLite
    • 提供丰富的查询选项工具函数
  • 集成 Viper 进行配置管理
  • 提供常用 gin 中间件和工具
    • 跨域中间件:处理 API 跨域请求,实现 CORS 支持
    • jwt 解析中间件:从请求中解析并验证 JWT Token,用于 API 身份认证
  • 国际化 (i18n) 支持
    • 基于请求 Accept-Language 头自动选择语言
    • 错误消息多语言支持
    • 内置英语 (en-US) 和中文 (zh-CN) 翻译
    • 可轻松扩展支持更多语言
  • 使用 Cobra 命令行框架,提供清晰的子命令结构
  • 支持数据库迁移与服务器启动分离,提高启动速度
  • 完善的数据库迁移系统,支持版本控制和回滚
  • 内置用户、角色、权限和菜单管理系统
  • 支持多种用户模式,满足不同规模项目需求
  • 优化的错误处理系统,支持错误码和多语言错误消息

另一个

  • RESTful API 设计规范
  • Gin 一款高效的golang web框架
  • MySQL 数据库存储
  • Jwt 用户认证, 登入登出一键搞定
  • Casbin 基于角色的访问控制模型(RBAC)
  • Gorm 数据库ORM管理框架, 可自行扩展多种数据库类型(主分支已支持gorm 2.0)
  • Validator 请求参数校验, 版本V9
  • Log v1.2.2升级后日志支持两种常见的高性能日志 logrus / zap (移除日志写入本地文件, 强烈建议使用docker日志或其他日志收集工具)
  • Viper 配置管理工具, 支持多种配置文件类型
  • Embed go 1.16文件嵌入属性, 轻松将静态文件打包到编译后的二进制应用中
  • DCron 分布式定时任务,同一task只在某台机器上执行一次(需要配置redis)
  • GoFunk 常用工具包, 某些方法无需重复造轮子
  • FiniteStateMachine 有限状态机, 常用于审批流程管理(没有使用工作流, 一是go的轮子太少, 二是有限状态机基本可以涵盖常用的审批流程)
  • Uploader 大文件分块上传/多文件、文件夹上传Vue组件vue-uploader
  • MessageCenter 消息中心(websocket长连接保证实时性, 活跃用户上线时新增消息表, 不活跃用户不管, 有效降低数据量)
  • testing 测试标准包, 快速进行单元测试
  • Grafana Loki 轻量日志收集工具loki, 支持分布式日志收集(需要通过docker运行gin-web-docker)
  • Minio 轻量对象存储服务(需要通过docker运行gin-web-docker)
  • Swagger Swagger V2接口文档
  • Captcha 密码输错次数过多需输入验证码
  • Sign API接口签名(防重放攻击、防数据篡改)
  • Opentelemetry 链路追踪, 快速分析接口耗时

参考链接

  • https://github.com/go-eagle/eagle
  • https://github.com/gourouting/singo: Gin+Gorm开发Golang API快速开发脚手架
  • https://github.com/gostartkit/web
  • https://github.com/go-nunu/nunu
  • https://github.com/limitcool/starter: starter 是一个 Go + gin 框架的项目脚手架,提供开箱即用的工具、库和 gin 项目配置,帮助您快速启动 gin 驱动的 API 项目开发。
  • https://gitee.com/liuxingxiang/gin-web-scaffolding
  • https://github.com/go-dev-frame/sponge/tree/main
  • https://github.com/zzjcool/ginHelper
http://www.xdnf.cn/news/694351.html

相关文章:

  • 网络协议DHCP
  • YOLO 系列算法的参数量
  • Java大师成长计划之第33天:应用监控与日志管理
  • 顺序表与链表专项训练:在 LeetCode 实战中深化数据结构理解
  • 力扣 秋招 打卡第一天 2025年5月28日 Java
  • Vim 中设置插入模式下输入中文
  • 考研系列-操作系统:第一章、计算机系统概述
  • freecad TechDraw工作台中虚线(隐藏线)的实现方式
  • 桥梁进行3D建模时的数据采集、存储需求及技术参数
  • 监控 Oracle Cloud 负载均衡器:使用 Applications Manager 释放最佳性能
  • android平台驱动开发(六)--Makefile和Kconfig简介
  • vue 实现鼠标放上后显示,挪开后隐藏(点击显示/隐藏)
  • 【微波遥感第一期】基本概念
  • OpenCV CUDA模块直方图计算------在 GPU 上计算图像直方图的函数calcHist()
  • 在部署了一台mysql5.7的机器上部署mysql8.0.35
  • QGraphicsView、QGraphicsScene和QGraphicsItem图形视图框架(七)修改item属性
  • Golang分布式系统开发实践指南
  • GO语言进阶:掌握进程OS操作与高效编码数据转换
  • 命象架构法 02|你的系统有“用神”吗?
  • [Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
  • Java常用加密方式
  • 聊一聊如何使用自动化测试来提高接口测试效率的?
  • PowerBI企业运营分析—绩效考核分析
  • 如何使用DeepSpeed来训练大模型
  • CPU特权级别:硬件与软件协同构建系统安全的基石
  • UDP组播套接字与URI/URL/URN技术详解
  • WHAT - useWebSocket 推荐
  • 深入理解设计模式之职责链模式
  • Python包管理器 uv替代conda?
  • 基于bp神经网络的adp算法