bjmayor 发布于 2025-11-05

Gin 框架最佳实践:构建可维护的 Go Web 应用

前言

Gin 是 Go 语言中最流行的 Web 框架之一,以其出色的性能和简洁的 API 设计深受开发者喜爱。然而,从"能用"到"好用"之间,还有很多工程实践需要遵循。本文将分享我在实际项目中总结的 Gin 最佳实践,帮助你构建更加健壮、可维护的应用。

🚀 快速开始

本文所有最佳实践已整合成完整的项目模板,可直接使用:

GitHub 仓库: https://github.com/d60-Lab/gin-template

# 方式 1: 使用 GitHub 模板创建项目 # 访问 https://github.com/d60-Lab/gin-template # 点击 "Use this template" 按钮 # 方式 2: 克隆仓库 git clone https://github.com/d60-Lab/gin-template.git my-project cd my-project # 方式 3: 使用初始化脚本(推荐) curl -fsSL https://raw.githubusercontent.com/d60-Lab/gin-template/main/scripts/init-project.sh | bash -s -- my-project

模板特性

  • ✅ 完整的 DDD 分层架构
  • ✅ Swagger API 文档
  • ✅ 单元测试 + 集成测试
  • ✅ OpenTelemetry 链路追踪
  • ✅ Sentry 错误监控
  • ✅ Pre-commit + golangci-lint
  • ✅ GitHub Actions CI/CD
  • ✅ REST Client 测试集合
  • ✅ 开发工具配置齐全

详细使用说明请参考 README.md

阅读全文 »

bjmayor 发布于 2025-11-05

高并发问题的处理思路:架构师的权衡之道

高并发系统的设计本质上是一场资源与需求之间的博弈。当系统面临流量洪峰时,我们需要的不是单一的技术方案,而是一套系统性的思维框架。这个框架的核心可以概括为一句话:分层加缓存。但这句话背后,隐藏着无数需要权衡的技术决策。

阅读全文 »

bjmayor 发布于 2025-11-03

百万并发抽奖实现:从 SQL-only 到 Redis + Lua 的抽奖优化实战

Day 4:从 SQL-only 到 Redis + Lua 的抽奖优化实战

本文记录今天将抽奖核心从“纯数据库事务”升级为“Redis + Lua 原子扣减 + 异步落库”的过程、优化点、踩坑与结果。

目标与背景

  • 目标:在保证功能正确与可观测的前提下,提高单机并发与整体吞吐,缓解数据库热点与锁竞争。
  • 背景:V1 方案所有请求走 PostgreSQL 事务,存在连接/锁瓶颈;V2 引入 Redis 作为热点写入层与限流去重层。

阅读全文 »

bjmayor 发布于 2025-11-02

百万并发抽奖基础版本实现-rust+postgresql

今天是第三天实验这个百万并发抽奖实现。
纯postgresql+rust实现结果:

这次压测的吞吐量约为 3951 QPS(10000 次请求在 2.53s 内完成 = 3951.68 QPS)。延迟分位说明:P50≈63.5ms、P95≈71.3ms、P99≈78.0ms,平均≈
63.9ms,代表单次抽奖接口的响应时延分布。若要更接近真实上限,建议服务和压测都用 release 模式并关闭调试日志后再测。

阅读全文 »

bjmayor 发布于 2025-11-02

TypeScript 泛型终极指南:从懵圈到精通-(AI教我学编程)

TypeScript 泛型终极指南:从懵圈到精通

前言

如果你学 TypeScript 时被泛型搞得头晕目眩,恭喜你,你不是一个人。泛型(Generics)可能是 TypeScript 中最让初学者困惑的概念之一。那些满屏的 <T><K, V>extends 看起来就像天书。

但其实,泛型的核心思想出奇地简单。读完这篇文章,你会发现泛型不过是"类型层面的函数"而已。

阅读全文 »