当前位置: 首页 > 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

相关文章:

  • 网站服务器出现异常的原因是什么?
  • 回头看,FPGA+RK3576方案的功耗性能优势
  • 网站缓存入门与实战:浏览器与Nginx/Apache服务器端缓存,让网站速度起飞!(2025)
  • Nginx代理、缓存与Rewrite
  • 智能驾驶感知算法任务简介
  • 2025年渗透测试面试题总结-匿名[校招]安全工程师(甲方)(题目+回答)
  • Vim 中设置插入模式下输入中文
  • 【烧脑算法】定长滑动窗口:算法题中的“窗口”智慧
  • 大模型在先天性肌性斜颈诊疗全流程中的应用研究报告
  • 【25-cv-00656】Whitewood律所代理Olga Drozdova 蝴蝶版权图维权案
  • 深入详解(0020,0052) Frame of Reference UID在序列空间定位中的定义与作用
  • 系统赛数据库的一些记录
  • 文件上传之图片马文件头绕过(upload-labs通关笔记-第14关)
  • 使用 find 遍历软链接目录时,为什么必须加 -L
  • 怎样将win11+ubuntu双系统的ubuntu从机械硬盘迁移至固态硬盘(1)
  • Vue.js教学第十七章:Vue 与后端交互(一),Axios 基础
  • 图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
  • 关于Web安全:7. WebShell 管理与持久化后门
  • 彰显国产力量|暴雨亮相2025 C3安全峰会
  • ipv6与p2p的关系
  • wordpress esc_attr/seo系统培训哪家好
  • 苏州电商网站建设/网站开发软件
  • 建设网站的个人心得体会/奇零seo赚钱培训
  • 阜阳做网站多少钱/百度关键词网站排名优化软件
  • 湖南营销型网站建设案例/百度大搜
  • 新疆维吾尔族城乡建设厅网站/廊坊seo培训