Gin项目脚手架与标配组件

news2025/6/3 19:04:03

文章目录

    • 前言
    • 设计思想和原则
    • ✨ 技术栈
    • 视频实况教程
    • 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.coloradmin.cn/o/2395574.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CS144 - LAB0

CS144 - Lab 0 telnet 发送请求 如图,很简单,但是注意输入时间太久会超时 发邮箱 首先我们需要用命令行去发邮箱,这里我用企业微信邮箱给自己的 qq 邮箱发送~ 整个命令如下! 对于其中的参数,其实从英文就可以看出来…

论文浅尝 | 将复杂知识图谱问答对齐为约束代码生成(COLING2025)

笔记整理:康家溱,东南大学在读硕士,研究方向为代码大语言模型 论文链接:https://aclanthology.org/2025.coling-main.267.pdf 发表会议:COLING 2025 1. 动机 近年来,随着大语言模型(LLM&#xf…

Golang|分布式搜索引擎中所使用到的设计模式

迭代器模式 定义:在遍历接口时,提供统一的方法函数供调用,保持一致性。核心思想:与大众习惯保持一致,方便第三方实现容器类时保持一致。常见方法:如next()方法,适用于所有集合类,简化…

Ubuntu22.04通过命令行安装qt5

环境: VMware17Pro ubuntu-22.04.5-desktop-amd64.iso 步骤: 安装好虚拟机进入shell,或通过ssh登录,确保虚拟机能上外网,执行命令: sudo apt update sudo apt install build-essential sudo snap in…

STM32:ESP8266 + MQTT 云端与报文全解析

知识点1【MQTT的概述】 1、概述 MQTT是一种基于发布/订阅模式的轻量级应用层协议,运行在TCP/IP协议之上,专用物联网(IoT)和机器对机器(M2M)设计,其核心目标是低带宽,高延迟或不稳定…

HTML5 Canvas 星空战机游戏开发全解析

HTML5 Canvas 星空战机游戏开发全解析 一、游戏介绍 这是一款基于HTML5 Canvas开发的2D射击游戏,具有以下特色功能: 🚀 纯代码绘制的星空动态背景✈️ 三种不同特性的敌人类型🎮 键盘控制的玩家战机📊 完整的分数统…

箱式不确定集

“箱式不确定集(Box Uncertainty Set)”可以被认为是一种 相对简单但实用的不确定集建模方式。 ✅ 一、什么是“简单的不确定集”? 在鲁棒优化领域,“简单不确定集”通常指的是: 特点描述形式直观数学表达简洁&#…

内存管理 : 04段页结合的实际内存管理

一、课程核心主题引入 这一讲,我要给大家讲的是真正的内存管理,也就是段和页结合在一起的内存管理方式。之前提到过,我们先学习了分段管理内存的工作原理,知道操作系统采用分段的方式,让用户程序能以分段的结构进行编…

vue3: baidusubway using typescript

项目结构&#xff1a; <!--npm install -D tailwindcss-3d BaiduSubwayMap.vue npm install -D tailwindcss postcss autoprefixer--> <template><div class"relative w-full h-screen"><!-- 地图容器 --><div id"subway-container…

Redis最佳实践——性能优化技巧之集群与分片

Redis集群与分片在电商应用中的性能优化技巧 一、Redis集群架构模式解析 1. 主流集群方案对比 方案核心原理适用场景电商应用案例主从复制读写分离数据冗余中小规模读多写少商品详情缓存Redis Sentinel自动故障转移监控高可用需求场景订单状态缓存Redis Cluster原生分布式分片…

常见相机的ISP算法

常见的ISP算法 3A算法 去雾算法 图像增强算法 图像宽动态算法 图像的电子缩放算法&#xff0c;无极电子缩放 图像降噪算法 相机常见问题 1.相机启动速度问题&#xff0c;启动速度较慢 2.相机扛不住高低温问题 3.相机散热问题问题 4.相机高低温芯片保护掉电 5.相机的成像效果或者…

2024 CKA模拟系统制作 | Step-By-Step | 8、题目搭建-创建 Ingress

目录 ​​​​​​免费获取题库配套 CKA_v1.31_模拟系统 一、题目 二、核心考点 Ingress 资源定义 Ingress Controller 依赖 服务暴露验证 网络层次关系 三、搭建模拟环境 1.创建命名空间 2.安装ingress ingress-nginx-controller 3.创建hello.yaml并部署 四、总结 …

OldRoll复古胶片相机:穿越时光,定格经典

在数字摄影盛行的今天&#xff0c;复古胶片相机的独特魅力依然吸引着无数摄影爱好者。OldRoll复古胶片相机这款软件&#xff0c;以其独特的复古风格和丰富的胶片滤镜效果&#xff0c;让用户仿佛穿越回了那个胶片摄影的黄金时代。它不仅模拟了胶片相机的操作界面&#xff0c;还提…

通俗易懂的 JS DOM 操作指南:从创建到挂载

目录 &#x1f9e9; 1. 创建元素&#xff1a;document.createElement / createElementNS &#x1f4dd; 2. 创建文本&#xff1a;document.createTextNode ✏️ 3. 修改文本&#xff1a;node.nodeValue &#x1f5d1;️ 4. 移除元素&#xff1a;el.removeChild() &#x1…

CSS Day07

1.搭建项目目录 2.网页头部SEO三大标签 3.Favicon图标与版心 &#xff08;1&#xff09;Favicon图标 &#xff08;2&#xff09;版心 4.快捷导航 5.头部-布局 6.头部-logo 7.头部-导航 8.头部-搜索 9头部-购物车 10.底部-布局 11.底部-服务区域 12.底部-帮助中心 13.底部-版权…

RV1126-OPENCV 交叉编译

一.下载opencv-3.4.16.zip到自己想装的目录下 二.解压并且打开 opencv 目录 先用 unzip opencv-3.4.16.zip 来解压 opencv 的压缩包&#xff0c;并且进入 opencv 目录(cd opencv-3.4.16) 三. 修改 opencv 的 cmake 脚本的内容 先 cd platforms/linux 然后修改 arm-gnueabi.to…

【深度学习】 19. 生成模型:Diffusion Models

Diffusion Models Diffusion Models 简介 Diffusion 模型是一类通过逐步添加噪声并再逆向还原的方式进行图像生成的深度生成模型。其基本流程包括&#xff1a; 前向过程&#xff08;Forward Process&#xff09;&#xff1a;将真实图像逐步加噪&#xff0c;最终变为高斯噪声…

JMeter 直连数据库

1.直连数据库的使用场景 1.1 参数化&#xff0c;例如登录使用的账户名密码都可以从数据库中取得 1.2 断言&#xff0c;查看实际结果和数据库中的预期结果是否一致 1.3 清理垃圾数据&#xff0c;例如插入一个用户&#xff0c;它的ID不能相同&#xff0c;在测试插入功能后将数据删…

易路 iBuilder:解构企业 AI 落地困境,重构智能体时代生产力范式

一、从大模型到智能体的产业跃迁 2024 年堪称中国人工智能产业的 "战略拐点" 之年。当 DeepSeek R1 模型以 "技术 价格" 双重普惠模式掀起行业震荡时&#xff0c;各企业纷纷意识到&#xff0c;大模型的真正价值不在于技术炫技&#xff0c;而在于成为企业…

计算机网络之路由表更新

1.解题思路 对新接收到的路由表进行更新&#xff0c;全部"距离"1&#xff0c;且"下一跳路由器"都写成发送方路由器的名称。 开始对比新表和原来的路由表 1.看目的网络 如果是新的目的网络&#xff0c;则直接把对应的各项信息填入表中&#xff1b;如果是相同…