2025年6月24日
摘要: 通常我们只需要一行代码即可启动 Go-Spring 应用,即 gs.Run() 这个看似简单的 gs.Run() 背后做了哪些事情呢?本文咱们跟随代码一点点深入分析,探究 Go-Spring 启动与停止的全过程。 gs.Run() 首先来看 gs.Run() 这个入口函数的代码实现。 type Ap 阅读全文
posted @ 2025-06-24 15:50 lvan100 阅读(119) 评论(0) 推荐(0)
摘要: 一、引言 在软件开发的日常中,我们时常陷入一种“框架式焦虑”: 明明想快速写个 Web 服务,却得翻几百行配置文件; 框架自动帮你注入了一堆对象,但你连它是怎么生效的都搞不清楚; 想替换一个核心模块,却发现它早就和其他几十个组件绑死在一起,动一处牵全身。 这类问题的根源,其实并不完全是框架“太复杂” 阅读全文
posted @ 2025-06-24 15:37 lvan100 阅读(36) 评论(0) 推荐(0)
摘要: 为什么需要 mock? 在单元测试中,我们通常希望测试的目标是一个最小可控的单位。然而现实中的业务逻辑往往依赖多个外部模块,比如数据库、HTTP 服务、Redis 缓存、第三方 API 等。这些外部依赖不可控、执行缓慢,甚至可能有副作用,比如写入数据或发送消息。 为了让单测更快、更稳定、更可重复,我 阅读全文
posted @ 2025-06-24 15:36 lvan100 阅读(38) 评论(0) 推荐(0)
摘要: 不久前,我接到了一个需求:开发同学希望能对 RPC 调用进行 mock。但问题在于,client 并没有被抽象成接口,因此无法直接使用传统的 mock 技术。为了实现这个目标,我不得不在 client 的方法内部嵌入 mock 能力。最终实现效果如下所示: type Client struct{} 阅读全文
posted @ 2025-06-24 15:34 lvan100 阅读(23) 评论(0) 推荐(0)