我用了四周、从零学 Go,做出了一个"系统时光机"

一个让我抓狂的问题 上周我在调试一个 bug,花了两个小时才发现——问题在昨晚某个时间点一个配置文件被悄悄修改了。我当时就想:如果有一个工具能告诉我"昨晚 10 点到 11 点,我的系统到底发生了什么",该多好。 我为什么选择用 Go 来做这件事 我之前只会使用Python、Java,Go这个语言其实对我来说是完全陌生的存在,我对Go的了解最初也是从我的同事那里听到的,他说我要是有空闲的时间就试着学学Go,我也不懂Go的魅力在什么地方。 我也是抱着试一试的心态去学习Go,毕竟项目驱动学习是让我觉得学习一个新东西是最快的,并且也是最有成效的一个东西。 我先是用了大模型去进行查询Go的基础语法,看到 =: 这玩意不懂这跟Python、Java、C++这类的语法规则完全不一样,也不知道goroutine 和线程有什么区别,为什么错误处理要写if err != nil 而不是 try/catch。这就让我很抓狂了但是最后也是想着多学一点是一点的心态进行学习。 Event Sourcing:我学到的最重要的概念 在开始写代码之前,我以为 ChronoTrace 的存储逻辑很简单——每隔几秒扫描一次系统状态,把结果存起来就行了。 直到我真正想清楚需求:我需要知道某个文件是什么时候被删的,某个进程是什么时候启动的。定时快照做不到这件事。如果一个进程在两次快照之间启动又退出,它就像从未存在过一样。 这让我意识到,我需要的不是"记录状态",而是"记录发生的事情"。这就是 Event Sourcing 的核心。 先从一个你熟悉的例子说起 想象你的银行 App。 它显示的余额是 500 元——这是"当前状态"。但银行后台实际存储的不只是这个数字,而是一条条的流水记录: 1 2 3 4 5 存入 100 元 ← 事件1 取出 200 元 ← 事件2 存入 600 元 ← 事件3 ───────────── 余额 500 元 ← 把所有事件加起来算出来的 余额不是直接存储的,它是从事件计算出来的。 这意味着什么?意味着你可以回答任何时间点的问题:三天前我有多少钱?某笔钱是什么时候进来的?如果只存余额,这些问题永远无法回答。 Event Sourcing 就是把这个思路用在软件系统里:不存储"现在是什么",只存储"发生了什么"。 用传统做法对比一下 如果 ChronoTrace 用传统方式设计,代码大概是这样: ...

2026-03-04 · 4 min · 666 words · Kai
这是封面图的描述

我的第一篇博客:初心与展望

大家好,我是小凯 很高兴你能来到这里,阅读我的第一篇博客。 为什么会有这个博客? 在这个信息爆炸的时代,我们每天都会接收到海量的碎片化信息。很多时候,我也像大家一样,在这个洪流中随波逐流。但是,我渐渐意识到,只有经过自己思考、沉淀并输出的内容,才真正属于自己。 建立这个博客,主要有以下几个初衷: 记录成长:技术更新迭代很快,生活也总是充满变数。我希望用文字记录下学习过程中的每一个脚印,无论是由于无知踩过的坑,还是攻克难题后的喜悦,都值得被珍藏。 分享知识:互联网精神在于分享。在过往的学习中,我从无数前辈的博文中受益匪浅。现在,我也希望通过自己的分享,能给后来者哪怕一点点的启发或帮助。 督促思考:写作是一种很好的深度思考方式。为了把一件事情讲清楚,我必须逼迫自己去深入理解它,去梳理逻辑,这本身就是一种极好的自我提升。 我会写些什么? 这个博客将主要围绕我的兴趣和工作展开,你可能会看到以下内容: 技术探索:编程语言的学习笔记、项目实战经验、新技术尝鲜评测等。 读书随笔:近期阅读的好书分享,以及我的读后感。 生活感悟:关于生活、关于成长的碎碎念。 结语 “种一棵树最好的时间是十年前,其次是现在。” 这篇博客既是一个开始,也是一份承诺。希望在这片小小的自留地里,能和你一起见证更好的我们。 保持热爱,奔赴山海。

2026-02-26 · 1 min · 17 words · 小凯