AI Coding 时代的 IDE 变局:从 GoLand 到 Code Agent 的思考

从一个服务端 Go 开发工程师的视角,探讨 AI Coding 时代 IDE 格局的变局——GoLand 到 Cursor/Trae 的尴尬错位。

AI开发工具IDEJetBrains

背景:一个服务端工程师的真实痛点

作为一名习惯了 JetBrains 全家桶的服务端 Go 开发工程师,我在 AI Coding 浪潮中遇到了一个尴尬的处境:

  • 日常用 Trae IDE 做 AI Chat Coding——描述需求,让 AI 生成代码,效率很高
  • 然后切回 GoLand 做代码审查——因为 GoLand 的代码索引、跳转、重构、JSON Helper 等能力是 VS Code 系无法替代的
  • 写一个功能要反复切应用——Trae 写代码 → GoLand 审代码 → 切回 Trae 改代码 → 再切 GoLand……心流不断被打断

这个问题的根源不是某个产品做得不好,而是 AI Coding 时代正在重新定义 IDE 的核心交互范式,而传统 IDE 还没有跟上。


当前 AI IDE 的格局

VS Code 阵营:AI-first 的激进派

CursorTraeWindsurf 等产品都是 VS Code 的 fork,天然继承了 VS Code 的插件生态和快捷键体系。它们的核心设计理念是:

AI 对话是主角,代码编辑是配角。

具体表现为:

  • Chat 对话面板可以占据屏幕中心位置(如 Trae 的 SOLO 模式)
  • Agent 模式下,AI 可以自主执行修改、测试、部署等一系列操作
  • 代码预览作为 AI 输出的附属展示,用户更多是”审查”而非”编写”

对 VS Code 用户来说,迁移到这些产品的成本几乎为零。

JetBrains 阵营:代码智能的守擂者

GoLand、IntelliJ IDEA 等 JetBrains IDE 的核心优势在于编译级别的代码理解能力

能力JetBrainsVS Code 系
代码索引编译级语义索引,跨包跳转精准基于 LSP(gopls),准确度稍逊
Find Usages语义级别,能区分同名不同义文本搜索为主,偶有误报
重构Rename、Extract Method 等是语义级操作依赖 LSP,复杂重构支持有限
调试集成 Delve,可视化断点、变量面板需要配置 launch.json
工具链集成Database、HTTP Client、Terminal 一体化需要拼凑多个插件

JetBrains 在 2025 年密集推出了 AI 相关能力——AI AssistantJunieACP 协议MCP 支持。但跟 Cursor/Trae 比起来,仍然是把 AI 当”插件”而非”核心”来设计。

Zed:技术理想主义的新势力

Zed 是 Atom 编辑器原班人马的新作品,用 Rust 从零重写,主打极致性能。启动仅需约 73MB 内存,内置实时协作和 AI Agent。但插件生态和企业级语言支持仍在追赶中。


GoLand 做不到”AI Chat 居中”的布局——这是架构问题

在 AI Coding 时代,越来越多的开发者希望 Chat 对话区域占据屏幕中心,代码退居二线。但在 GoLand 中,这个布局是不可能实现的。

IntelliJ 平台的 UI 架构限制

根据 IntelliJ Platform Plugin SDK 的官方文档,IDE 的布局被定义为固定结构:

  • Main toolbar(顶部)
  • Stripes(左右两侧)
  • Tool windows that surround the editor(工具窗口围绕编辑器,只能在左、右、底部)
  • Editor area(编辑器区域,永远在中间)
  • Status bar(底部)

关键描述是 Tool windows that surround the editor——工具窗口是围绕编辑器的,编辑器是被包围的中心。这是平台级的 UI 架构定义。

插件 API 的限制

从插件开发角度看,Tool Window API 只支持 Left、Right、Bottom 三个位置,没有 Center 或 Replace Editor 的选项。所有工具窗口的移动操作(拖拽、浮动、分栏)都在”围绕编辑器”的框架内进行。

改动成本

IntelliJ 平台的 UI 框架积累了 20 多年,“Editor Area 作为中心”的假设渗透到了整个平台:

受影响层级具体范围
窗口管理器ToolWindowManager 和 FileEditorManager 是两套独立系统
插件生态数千个第三方插件基于”Editor 在中间”的假设开发
快捷键体系Split Editor、Tab 导航、Focus Editor 等都默认指向中间区域
布局持久化窗口位置的保存/恢复按”中心是 Editor”的模型序列化

两种产品哲学的碰撞:产品是给人用的,还是给 AI 用的?

这是整个讨论中最本质的问题。

GoLand 的工具是”给人用的”

GoLand 集成的那些工具——测试面板、数据库可视化、部署控件、调试器——都是精心为人类交互设计的:

工具给人用的设计(GoLand)给 AI 用的方式(Shell)
测试结果绿色/红色图标、可折叠测试树stdout 文本,PASS 或 FAIL
数据库可视化表格、SQL 自动补全psql -c 'SELECT ...'
部署按钮、进度条、状态灯kubectl apply
调试断点、变量面板、调用栈可视化dlv debug
HTTP 请求高亮请求/响应、历史记录curl

这些精心设计的 UI 对人来说是体验提升,但对 AI 来说完全多余。AI 不需要绿色图标告诉它测试通过了,读 PASS 就行。

Cursor/Trae 的选择:“让 AI 用 Shell 干活”

Cursor 和 Trae 选择了一条简单粗暴但能跑通的路:AI 直接调 shell 命令执行一切操作,再把结果翻译成人话告诉用户

尴尬的错位

GoLand 花了 20 年打磨的产品能力:
  ✅ 人能高效操作
  ❌ AI 不能调用(没有程序化接口)

Cursor/Trae 的 Shell 调用:
  ❌ 人看着费劲(原始文本输出)
  ✅ AI 能调用、能解析、能闭环

GoLand 应该怎么做?一个务实的架构提案

ACP 的问题:太绕了

JetBrains 当前推的 ACP 方案思路是:定义标准协议 → 让 AI Agent 通过 IDE 的 API 调用所有能力。问题在于:

  • 协议制定慢,要多方适配,周期很长
  • 过度工程化——AI 跑个测试不需要通过 IDE 的 Run Configuration API,一行 go test ./... 就够了
  • AI 要先学会用 IDE 的 API,而不是直接用它最擅长的 shell

更务实的方案:AI 用 Shell 干活,失败了唤起人机工具

核心思路:AI 的执行通道和人的审查通道分开,各用各最擅长的方式。

┌─────────────────────────────────────┐
│              AI Agent               │
│  用 shell 执行:简单、通用、快        │
│  go test / go build / curl / kubectl│
└──────────────┬──────────────────────┘
               │ 输出

┌─────────────────────────────────────┐
│        GoLand 智能中间层             │
│  监听输出 → 解析结果 → 判断成功/失败  │
└───────┬─────────────────┬───────────┘
        │ 成功             │ 失败
        ▼                 ▼
  AI 继续下一步      GoLand 唤起人机工具:
                     • Run 面板展示日志
                     • Debugger 定位到失败行
                     • Diff 面板展示改动
                     • Chat 给出 AI 分析

这个方案的精髓在于:

  1. AI 干活时不需要高级工具——shell 就够了,跟 Cursor 一样简单粗暴
  2. 出了问题才需要”给人用的工具”——GoLand 的 Run 面板、Debugger、Diff 视图等能力此时发挥价值
  3. 不需要给 AI 造一套新 API——只需要在 AI 用 shell 执行失败时,智能地唤起对应的人机交互工具

GoLand 的正确定位

GoLand 不应该是”给 AI 用的工具”,而应该是”人审查 AI 工作的最佳界面”。

  • Shell 是 AI 的手
  • GoLand 是人的眼

两步走路线图

第一步:守护心流——一体化端到端测试

让开发者在不切应用的情况下完成完整的开发循环:

AI 写代码 → 同一个面板里跑单测 → 一键部署测试环境 → 看结果 → 不满意直接 Chat 里说 → AI 改 → 循环

第二步:AI 驱动的自动化闭环

让 AI 能够调用公司内部的部署插件、测试框架等工具,实现端到端的自动化:

当前目标
AI 生成代码 → 人手动跑测试 → 人手动部署 → 人看日志AI 生成代码 → AI 调 shell 跑测试 → AI 调部署工具部署 → AI 读日志判断 → 失败时唤起 GoLand 调试工具

JetBrains 的时间窗口

短期安全:迁移壁垒是护城河

Cursor/Trae 对 JetBrains 用户的冲击有限,因为迁移成本很高:

  • 快捷键肌肉记忆:Cmd+B、双击 Shift、Ctrl+Shift+F……这些刻在手指里的操作习惯很难改
  • 代码智能差距:IntelliJ 的语义索引远超 gopls
  • 工作流依赖:Database、HTTP Client、Git 集成、Run/Debug 等 all-in-one 体验
  • 团队惯性:代码风格配置、.idea 共享、Review 习惯都绑定在 JetBrains 生态

长期风险:增量用户被截胡

真正的威胁不是存量用户流失,而是增量用户被截胡。当 AI Coding 成为默认工作方式:

  • 新一代开发者直接从 Cursor/Trae 起步
  • 他们的肌肉记忆是 VS Code 快捷键
  • 他们的工作习惯是”对话驱动”而非”编辑器驱动”
  • JetBrains 的用户池会慢慢萎缩

JetBrains 需要的不只是”加个 AI 面板”

JetBrains 需要重新思考 IDE 的信息架构:在 AI Coding 时代,代码编辑器还应不应该永远占据 C 位?

理想的 IDE 应该能让用户自由切换两种模式:

  • 代码中心模式:适合 Debug、追踪调用链、审查 PR、理解复杂业务逻辑
  • AI 中心模式:适合快速写新功能、搭脚手架、写单测、CRUD

就像手机的横竖屏切换一样自然。谁先做到这一点,谁就赢了下一个十年。