本文最后更新于 2026年10月20日。
核心一句话
不是技术人不懂 Go/Rust,是生态、开发速度、跨平台分发、已有业务复用压倒了内存开销;CLI 没界面 ≠ 只看运行内存。 下面拆开讲,同时说清楚 Go 的优势和 JS 的痛点,以及什么时候确实应该选 Go。
1. 最大原因:AI Agent 本身大量复用 JS/TS 生态
现在绝大多数 LLM Agent、MCP、工具调用、prompt 库、解析器、schema 校验、前端配套逻辑最早都是 JS/TS 写的:
- OpenAI / Anthropic 官方 SDK 首选 TS;
- MCP(Model Context Protocol)早期官方库是 TS;
- 各种解析 Markdown、JSON schema、YAML、AST 代码解析、文件树遍历、沙箱工具,JS 库数量碾压;
- 很多项目是前端团队转做 CLI Agent:一套 TS 代码,同时跑在 Web、VSCode 插件、CLI。一份逻辑多端复用,不用重写一遍 Go。
场景举例:VSCode 的 AI 插件,想配套一个同能力 CLI。如果用 Go,业务逻辑要双份维护;TS 写 CLI,直接复用插件里全部 agent 逻辑,测试、prompt、工具调用代码完全共用。 这是大量 CLI Agent 选择 TS 的头号理由,不是为 CLI 选 JS,是为了复用已有 JS 业务。
2. 开发迭代速度:TS 原型极快,Agent 特别吃快速试错
Agent 本质是胶水程序:拼接 prompt、调用 LLM、解析返回、调用本地工具、处理各种非结构化输出。
- TS:类型系统够用,JSON 原生友好,动态构造工具定义、动态函数调用非常省事;改 prompt、加工具、调试链路,迭代速度很快。
- Go:强类型、编译安全,但处理动态 JSON、动态工具注册、可变 schema 会写大量样板代码。Agent 项目经常今天新增一个工具,明天调整输出解析,Go 的静态类型会增加不少脚手架代码。
Agent 项目很多是快速验证产品想法:先跑通能力,后面流量/资源压力上来,再考虑把核心模块下沉到 Rust/Go。很多项目就是这个路径:TS MVP → 热点组件重写为原生。
3. 分发上,npm 是现成的全球包管理器,用户习惯已经养成
对开发者工具类 CLI: 用户天然会敲 npm install -g xxx。
- npm 自动处理版本管理、升级、卸载;
- 自带依赖解析,不用自己写跨平台安装脚本;
- 可以在 package.json 里声明依赖,CI/CD 发布链路成熟。
而 Go 二进制分发你要自己搞定:
- 为 windows/mac/amd64/arm64 编译多份二进制;
- 写下载脚本、更新器;
- 处理权限、PATH;
- 做版本管理、回滚。
当然现在很多项目混合方案:npm 包只是一个几十行的 JS 下载器,安装时拉 Go/Rust 二进制,运行直接调用原生程序。兼顾 npm 分发体验 + Go 的低内存。
4. 但你说得完全没错:Node 做纯 CLI 确实很重
Node/V8 自带完整 JS 引擎,哪怕你的业务只有几十行,启动就要占用基础内存(几十MB起):
- 进程基础开销大;冷启动慢;
- V8 GC 行为不可控,长时间跑 Agent 持续加载上下文、历史消息时,堆内存容易持续上涨;
- 并发任务多的时候,内存开销差距会被放大。
✅ 所以资源受限场景(容器批量跑大量 agent、边缘机器、小实例)Go/Rust 明显更合适:
- 极小基础内存占用;
- 启动毫秒级;
- 内存可控,没有 V8 堆包袱;
- 静态编译单文件,无运行时依赖。
5. 什么时候大家依然坚持 JS CLI,什么时候迁移 Go
适合 JS/TS CLI Agent
- 项目和 Web / VSCode 插件 / 浏览器端共享大量业务代码;
- 快速原型,频繁迭代 prompt、工具链;
- 用户群体是前端开发者,习惯 npm;
- 单机少量运行,内存不是瓶颈。
适合 Go/Rust CLI Agent
- 需要批量并发跑很多 Agent(容器批量任务);
- 长时间后台驻留运行;
- 资源紧张,内存预算低;
- 没有 Web 端复用需求,纯本地 CLI。
6. 行业现在的折中路线(越来越流行)
- 外层 CLI:Go/Rust(轻量二进制)
- Agent 核心推理/工具调用:复用 TS 库,通过子进程 / HTTP / MCP 协议调用
- 或者:npm wrapper 包,安装时下载 Go 二进制,你敲命令看起来是 npm 程序,实际跑原生程序。
总结你的疑问
CLI 又不需要界面为什么用 JS 开发,这么重,用 go 等多好
技术上 Go 确实更适合纯 CLI,内存和启动都占优;但选型不是只看运行时性能,更多看团队栈、代码复用成本、分发成本。 很多 CLI Agent 不是“为 CLI 选 JS”,而是本来就有一套 JS 的 Agent 逻辑,顺便打包成 CLI。
如果你打算自己写一个 CLI Agent:
- 只做本地命令行工具,没有前端复用需求:优先 Go
- 需要和 VSCode 插件、网页端共用 agent 逻辑:TS 更省事