用 Go 写 AI 命令行工具的实践

这篇文章从一个最小可运行示例出发,梳理用 Go 编写 AI 命令行工具的三个关键点:交互式输入循环、基于 SSE 的流式响应,以及更适合终端阅读的逐字输出方式。读完后,你可以判断哪些实现足够入门,哪些细节会直接影响 CLI 的实际体验。

用 Go 写 AI 命令行工具的实践

厌倦了 Makefile?Go 项目可以试试更直观的 Taskfile

Taskfile 是用 Go 编写的任务运行器,主打用 YAML 管理构建、测试和发布流程。对常写 Go 项目的人来说,它在可读性、跨平台和变量管理上都比 Makefile 更省心,但生态成熟度仍不如后者,是否替换更适合结合项目阶段和团队习惯来判断。

厌倦了 Makefile?Go 项目可以试试更直观的 Taskfile

Go 语言实现 MCP 服务中的 Prompt:从核心类型到服务端实践

这篇文章围绕 Go 官方 MCP SDK 中的 Prompt 能力展开,重点说明 Prompt 与系统 Prompt 的区别、核心类型如何配合,以及如何落地到可复用的代码审查和技术问答模板。文中保留关键代码与接口,适合用来快速判断 MCP Prompt 在服务端的实现方式。

Go 语言实现 MCP 服务中的 Prompt:从核心类型到服务端实践

别再只用 omitempty 了:Go 1.24 的 omitzero 让 JSON 序列化更精确

Go 1.24 为 `encoding/json` 增加了 `omitzero` 标签,用来按“零值”而不是“空值”决定字段是否序列化。它解决了 `time.Time` 零值总被输出、`nil` 切片与空切片无法区分,以及自定义类型缺少忽略规则等老问题。 在 Go 项目里,很多人已经把 `omitempty` 用成了默认配置,但一到 `time.Time`、空切片和自定义类型这些细一点的场景,序列化结果就常常不如预期。

别再只用 omitempty 了:Go 1.24 的 omitzero 让 JSON 序列化更精确

从 for i := 0 到 range n:Go 循环语法的进化指南

Go 1.22 新增了对整数直接使用 `range` 的写法,让固定次数循环不必再写完整的三段式 `for`。这篇文章会把它与旧写法放在一起说明,讲清语法规则、适用场景和边界,帮助你判断哪些计数循环适合直接改写。

从 for i := 0 到 range n:Go 循环语法的进化指南

提升 Go 代码质量的 Lint 工具,应该怎么选和搭配?

Go 生态里的 lint 工具很多,但并不是装得越多越好。本文按“官方基础、主力整合、专项检查、落地配置”四个层次梳理常用工具,保留安装命令、典型配置和适用场景,帮助你判断个人项目、团队协作和 CI 流程里该怎么选。

提升 Go 代码质量的 Lint 工具,应该怎么选和搭配?