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.pswp.cn/pingmian/82680.shtml

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

相关文章

【Webtrees 手册】第 10章 - 用户体验

Webtrees 手册/用户体验 < Webtrees 手册 跳转到导航跳转到搜索 信息 手册部分仍在建设中 请耐心等待或随意贡献自己的力量:-)。 第 10 章 - 用户体验 <- 章节概述 目录 1多位系谱学家的合作 1.1家庭研究模型1.2“孤胆战士”模型1.3示范“本地家庭书”1.4模特“俱乐部”…

Linux 进程概念(下)

目录 前言 4.进程状态 一.普遍的操作系统层面上宏观概念&#xff1a; 二.具体的Linux操作系统的状态&#xff1a; 5.进程优先级&#xff08;了解&#xff09; 6.其他概念 进程切换 前言 本篇是接着上一篇的内容继续往下了解进程相关的一些概念&#xff01; 4.进程状态 运…

使用java实现word转pdf,html以及rtf转word,pdf,html

word,rtf的转换有以下方案&#xff0c;想要免费最靠谱的是LibreOffice方案, LibreOffice 是一款 免费、开源、跨平台 的办公软件套件&#xff0c;旨在为用户提供高效、全面的办公工具&#xff0c;适用于个人、企业和教育机构。它支持多种操作系统&#xff08;Windows、macOS、…

IP证书的作用与申请全解析:从安全验证到部署实践

在网络安全领域&#xff0c;IP证书&#xff08;IP SSL证书&#xff09;作为传统域名SSL证书的补充方案&#xff0c;专为公网IP地址提供HTTPS加密与身份验证服务。本文将从技术原理、应用场景、申请流程及部署要点四个维度&#xff0c;系统解析IP证书的核心价值与操作指南。 一…

GitLab 18.0 正式发布,15.0 将不再受技术支持,须升级【三】

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 学习极狐GitLab 的相关资料&#xff1a; 极狐GitLab 官网极狐…

超简单Translation翻译模型部署

Helsinki-NLP/opus-mt-{en}-{zh}系列翻译模型可以实现200多种语言翻译&#xff0c;Helsinki-NLP/opus-mt-en-zh是其中英互译模型。由于项目需要&#xff0c;在本地进行搭建&#xff0c;并记录下搭建过程&#xff0c;方便后人。 1. 基本硬件环境 CPU&#xff1a;N年前的 Intel…

Go语言JSON 序列化与反序列化 -《Go语言实战指南》

JSON&#xff08;JavaScript Object Notation&#xff09;是一种常见的数据交换格式。Go 标准库提供了 encoding/json 包&#xff0c;用于方便地将结构体与 JSON 之间互转。 一、序列化&#xff08;Marshal&#xff09; 将 Go 中的数据结构&#xff08;如结构体、map、slice 等…

免费PDF工具-PDF24V9.16.0【win7专用版】

【百度】https://pan.baidu.com/s/1H7kvHudG5JTfxHg-eu2grA?pwd8euh 提取码: 8euh 【夸克】https://pan.quark.cn/s/92080b2e1f4c 【123】https://www.123912.com/s/0yvtTd-XAHjv https://creator.pdf24.org/listVersions.php

网络 :序列和反序列化

网络 &#xff1a;序列和反序列化 &#xff08;一&#xff09;序列和反序列 概念&#xff08;二&#xff09;实例1. 封装socket 接口2. 制定协议&#xff08;用于实现序列和反序列化&#xff09;3. 计算(实现计算器功能)4. 服务器(将上面所有的类功能调用起来)5. 服务端6.客户端…

LiveQing 视频点播流媒体 RTMP 推流服务功能:搭建 RTMP 视频流媒体服务详细指南

LiveQing视频点播流媒体RTMP推流服务功能&#xff1a;搭建RTMP视频流媒体服务详细指南 一、流媒体服务搭建二、推流工具准备三、创建鉴权直播间四、获取推流地址五、配置OBS推流六、推流及播放七、获取播放地址7.1 页面查看视频源地址7.2 接口查询 八、相关问题解决8.1 大疆无人…

UE5 Niagara 如何让四元数进行旋转

Axis Angle中&#xff0c;X,Y,Z分别为旋转的轴向&#xff0c;W为旋转的角度&#xff0c;在这里旋转角度不需要除以2&#xff0c;因为里面已经除了&#xff0c;再将计算好的四元数与要进行旋转的四元数进行相乘&#xff0c;结果就是按照原来的角度绕着某一轴向旋转了某一角度

【微服务】SpringBoot 对接飞书审批流程使用详解

目录 一、前言 二、前置准备 2.1 开通企业飞书账户 2.2 确保账户具备多维表操作权限 2.3 获取飞书开放平台文档 2.4 创建应用 2.5 发布应用 2.6 应用添加操作权限 2.7 获取SDK 三、审批流程对接过程 3.1 配置流程审批定义(流程审批模型) 3.2 自定义应用添加审批AP…

主键与唯一键详解:概念、区别与面试要点

主键与唯一键详解:概念、区别与面试要点 一、核心概念解析 1.1 主键(Primary Key) 主键是数据库表中用于唯一标识每一行记录的列或列组合,具有以下核心特性: 唯一性:主键值在整个表中必须唯一,不允许重复非空性:主键列不允许包含NULL值不可变性:主键值一旦确立,原则…

前端面试准备-1

1.NodeJS的优缺点 优点&#xff1a;   高并发&#xff08;最重要的优点&#xff09;   适合I/O密集型应用 缺点&#xff1a;   不适合CPU密集型应用&#xff1b;CPU密集型应用给Node带来的挑战主要是&#xff1a;由于JavaScript单线程的原因&#xff0c;如果有长时间运行的…

GO并发过高导致程序崩溃如何解决

#作者&#xff1a;曹付江 文章目录 1.并发过高导致程序崩溃2. 如何解决2.1 利用 channel 的缓存区2.2 利用第三方库 3 调整系统资源的上限3.1 ulimit3.2 虚拟内存(virtual memory) 1.并发过高导致程序崩溃 看一个非常简单的例子&#xff1a; func main() {var wg sync.WaitG…

Linux -- gdb/cgdb的认识和使用

预备知识 程序的发布⽅式有两种&#xff0c; debug 模式和 release 模式&#xff0c; Linux gcc/g 出来的⼆进制程 序&#xff0c;默认是 release 模式。 要使⽤gdb调试&#xff0c;必须在源代码⽣成⼆进制程序的时候, 加上 -g 选项&#xff0c;如果没有添加&#x…

window 显示驱动开发-Direct3D 呈现性能改进(四)

调用资源创建、映射和取消映射函数的行为更改 对于 WDDM 1.3 及更高版本驱动程序实现的这些函数&#xff0c;Direct3D 运行时为映射默认方案提供一组受限的输入值。 这些受限值仅适用于支持功能级别 11.1 及更高版本的驱动程序。 CreateResource (D3D11) 函数— 这些输入 D3…

3.python操作mysql数据库

前言&#xff1a;在现代应用程序中&#xff0c;数据库扮演者至关重要的角色。mysql是一个流行的关系型数据库管理系统&#xff0c;广泛应用于各种规模的应用中。在pytho中&#xff0c;我们可以通过连接库与mysql数据库进行交互&#xff0c;实现数据的增删改查操作。与此同时&am…

day023-网络基础与OSI七层模型

文章目录 1. 网络基础知识点1.1 网络中的单位1.2 查看实时网速&#xff1a;iftop1.3 交换机、路由器 2. 路由表2.1 查看路由表的命令2.2 路由追踪命令 3. 通用网站网络架构4. 局域网上网原理-NAT5. 虚拟机上网原理6. 虚拟机的网络模式6.1 NAT模式6.2 桥接模式6.3 仅主机模式 7.…

DeepSeek智能对话助手项目

目录&#xff1a; 1、效果图2、实现代码3、温度和TopK的作用对比 1、效果图 2、实现代码 # import gradio as gr# def reverse_text(text): # return text[::-1]# demogr.Interface(fnreverse_text,inputs"text",outputs"text")# demo.launch(share&q…