所有文章列表

人与各种形状图示

地道 Go 语言 Enum 与 Union 实践方式

Go 既没有 Enum(枚举)也没有 Union(联合)的关键字,因此会使用现有的语言特性来达到相同效果。参考 TypeScript,使用 Enum 组合 (const + iota) 与 Union 组合 (interface + struct)。

惊叹号图示

地道 Go 错误处理模式:Must

最近用到 Go 官方 uuid 库产生 UUID v7 时候留意到一种使用方式是:Must,他的描述也很简单:Must returns uuid if err is nil and panics otherwise. 用途是「当错误不是一个可以恢复的选项时」,使用包装好的 `Must` 直接 panic 错误。

循环图示

借助 AI Loop 统一后端请求与响应格式

你有遇过格式不一的后端专案吗?近期在翻新某个 Go 后端专案痛苦的因素就是请求与回应格式不一,这是一个很直白且简单的问题,但实际会造成很大的困扰。藉由定义完整的 Agent Skills 文件与 goal 来自动达成目标。

连结节点图示

Go os.Root 预防路径遍历最佳实践

最近在撰写的 Go 后端使用到大量的本地文件访问,其中最需要被防范的问题之一就是「路径遍历」。而在 Go 1.24 新增了 `os.Root` API 简洁优雅地避免安全问题。可以考虑所有 `os.Open` 的使用场景是否安全,并替换为 `os.Root` 确保「操作不应访问该目录之外的文件」。

CPU 符号

32-bits 与 64-bits 系统差异

还记得小时候的电脑都是 32-bits 的系统,大约在 win7 的时代已经逐步的替换成 64-bits 系统了,但我还是不了解具体来说有什么差异,只记得有段时间有两种软体规格可以选择,或是某些软体需要用「兼容模式」来执行。

内存图标

Go struct 内存对齐如何提升内存利用效率

在学习 Go 时会了解到 `struct` 其实就是一串自订的资料结构,而其中栏位的「顺序」将直接影响到在内存中所占用的实际大小甚至程式的速度。了解内存对齐的概念除了「节省空间」外也能为打造「更佳的缓存局部性(Cache locality)」。

魔法棒符号

在 CI 中通过自动化静态验证提升 Go 代码质量

近期在开发 Go 专案时发现到提交代码流程总是有些摩擦,像是开发时习惯用 Tab 到 GitLab 上宽度就会变得很奇怪,或是一些简单的对齐问题都在无形消耗专注力。所以透过把一些原生的 Go 静态检查工具搬到 CI 上执行,确保统一的开发体验。

清单符号

通过 Go Slog 实现结构化宽事件日志的最佳实践

最近有较多的时间思考开发上的最佳实践,考虑到目前开发的一个后端项目基本就是拿 go 原生的 log 到处打印储存片面状态而已。在阅读一些文件与最佳实践后,我想着手改善现有的 logging 体验透过导入 Go 1.21 引入的原生 slog 库。

网格符号

从头了解 Redis 缓存种类与常见灾难

Redis 是十分常见的 In-Memory 资料库,工作上时不时会碰到它但很少仔细从头了解它,所以透过撰写重现一些案例达成更深刻的理解。缓存就是把常存取的资料放在能够快速获取的地方,缺点是记忆体不像硬碟适合长久保存资料,但不管是提高速度、降低延迟、降低负担或减轻成本⋯⋯缓存都是很棒的选择。

标签图示

Go 的 Zero Value 与实战案例

相较于 C 读取未定义数值的变数会造成安全漏洞或崩溃,或是动态语言如 JavaScript 没有数值型别初始化的问题,Go 的设计上就自动赋予了确定意义的数值避免出错与创建即可使用。具体来说在例如使用 json 反射的标签中 `omitempty` 也正是运用了 Zero Value 的概念来判断。

机器人图标

学会通过 Ollama 在本地运行 LLM 并挑选合适的模型

虽然在 AI 出现之前很难想像,但 2026 年工作上我已经很少「手写程式」而是透过 AI 更有效率的辅助开发,我相信在 AI 百家争鸣的时代不用特别执着用哪个模型或工具,挑个最新顺手的免费方案就够了,未来模型只会更便宜更有效率。

打勾图示

使用 Testcontainers 实现后端集成测试

前端测试主要重点在与浏览器打交道(Jsdom、Headless Browser)且通常只与单一后端进行沟通,而后端测试则是面临截然不同的难题:分散服务与状态。这篇文章介绍实战上我如何透过 Testcontainers 创建 Docker 测试环境来达成完整的后端整合测试流程。

Passkey 图示

实战 FIDO 验证实现无密码登录

不同网站的密码需要管理,不仅容易忘记,也存在被窃取或重复使用的风险。如果只需要扫描指纹或使用面部识别,就能立即完成注册与登录——这正是 FIDO(Fast IDentity Online)所推动的“无密码身份验证”愿景。