编程 OpenCode 深度解析:160K Stars 的开源 AI 编程 Agent 如何用 LSP 感知 + 多会话并行 + 75+ 模型支持重新定义终端编程体验——从架构设计到生产级工作流的完整实战指南

2026-07-06 21:15:45 +0800 CST views 12

OpenCode 深度解析:160K Stars 的开源 AI 编程 Agent 如何用 LSP 感知 + 多会话并行 + 75+ 模型支持重新定义终端编程体验——从架构设计到生产级工作流的完整实战指南

引言:终端编程的第二春

2026年,AI 编程工具的战场已经从「谁的代码补全更快」演进到「谁能真正理解整个代码库」。在这个赛道上,Claude Code 凭借 Anthropic 的模型优势占据高端市场,Gemini CLI 以 Google 的百万上下文窗口吸引眼球,而 OpenCode 则走出了一条完全不同的路——开源、免费、模型无关、终端优先

截至2026年7月,OpenCode 在 GitHub 上已经积累了超过 160,000 Stars,拥有 900+ 贡献者13,000+ 提交,每月被超过 750万开发者 使用。这些数字背后,是一个真正由社区驱动的开源奇迹。

但数字只是表面。OpenCode 真正让人兴奋的,是它在技术架构上做出的一系列大胆选择:用 LSP(Language Server Protocol)给 AI 装上「代码智能感知」,用多会话并行让多个 Agent 同时工作,用 Zen 网关解决模型选择焦虑,以及用 Plan/Build 双模式工作流把「想清楚」和「写代码」彻底分离。

本文将从架构设计、核心功能、工具系统、模型生态、实战工作流五个维度,深度解析 OpenCode 的技术实现,并附带完整的代码示例和性能优化建议。


一、项目背景与定位

1.1 从 SST 到 Anomaly:一个开源项目的进化

OpenCode 最初由 SST(Serverless Stack)团队创建,后由 Anomaly 公司接手维护。SST 团队在构建无服务器框架的过程中,深刻体会到开发者在终端中编写和调试代码的痛点——频繁切换窗口、上下文丢失、AI 工具与终端割裂。

OpenCode 的核心理念可以用一句话概括:让 AI 编程助手住在终端里,而不是住在浏览器里。

与 Claude Code(闭源、绑定 Anthropic 模型)、Gemini CLI(绑定 Google 模型)不同,OpenCode 从第一天起就是模型无关的。它支持 75+ 个 LLM 提供商,包括 OpenAI、Anthropic、Google、DeepSeek、Qwen、GLM 等几乎所有主流模型,甚至支持本地运行的 Ollama 模型。

1.2 为什么选择终端?

终端是开发者最熟悉的工作环境。一个优秀的终端 AI 编程助手应该:

  • 零上下文切换:不需要离开终端去浏览器或 IDE
  • 脚本化能力:可以被 shell 脚本调用,集成到 CI/CD 流水线
  • 远程友好:在 SSH 会话中无缝工作
  • 资源轻量:不需要启动一个 Electron 应用

OpenCode 正是围绕这些原则设计的。它的 TUI(终端用户界面)基于 Go 语言的 Bubble Tea 框架构建,提供了丰富的交互体验,同时保持了终端工具的轻量级特性。


二、架构设计深度剖析

2.1 整体架构

OpenCode 的架构可以分为四层:

┌─────────────────────────────────────────────┐
│              接入层 (Access Layer)            │
│   TUI │ Desktop App │ IDE Extension │ CLI   │
├─────────────────────────────────────────────┤
│            编排层 (Orchestration Layer)       │
│   Agent Manager │ Session Router │ Context   │
├─────────────────────────────────────────────┤
│              工具层 (Tools Layer)             │
│   bash │ edit │ read │ grep │ glob │ LSP    │
│   apply_patch │ skill │ webfetch │ MCP      │
├─────────────────────────────────────────────┤
│            模型层 (Provider Layer)            │
│   Zen Gateway │ 75+ Providers │ Local Models │
└─────────────────────────────────────────────┘

2.2 TUI 层:Bubble Tea 的精妙运用

OpenCode 的终端界面基于 Go 语言的 Bubble Tea 框架构建。Bubble Tea 采用 Elm 架构(Model-Update-View),是一种函数式的 TUI 框架。

选择 Bubble Tea 而不是更常见的 ncurses 或 tcell,有几个关键考量:

  1. 声明式 UI:Bubble Tea 的 Model-Update-View 模式让 UI 状态管理变得清晰
  2. 高性能渲染:基于 termenv 的高效终端渲染,支持真彩色和 Unicode
  3. 跨平台一致性:在 macOS、Linux、Windows(WSL)上提供一致的体验

TUI 层的核心职责包括:

  • 消息展示:以 Markdown 格式渲染 AI 的回复,支持代码高亮
  • 文件拖拽:支持将图片拖入终端作为上下文
  • 多面板布局:会话列表、主对话区、文件预览区的灵活切换
  • 快捷键系统:可自定义的键盘快捷键

2.3 Agent 编排层:Plan 与 Build 的双模式设计

这是 OpenCode 最有特色的设计之一。与大多数 AI 编程工具只有一个「全能 Agent」不同,OpenCode 内置了两种主 Agent 和三种子 Agent:

主 Agent(Primary Agents):

Agent模式权限用途
Build主 Agent全部工具可用日常开发,修改代码
Plan主 Agent文件编辑和 bash 需要审批分析代码,制定方案

子 Agent(Subagents):

Agent模式权限用途
General子 Agent全部工具(除 todo)复杂问题研究,多步骤任务
Explore子 Agent只读快速搜索代码库
Scout子 Agent只读外部文档和依赖研究

这种设计的核心思想是关注点分离

用户需求
    │
    ├─ "我想了解这段代码" → Plan Agent (只读分析)
    │
    ├─ "帮我实现这个功能" → Build Agent (修改代码)
    │
    ├─ "搜索一下项目中的错误处理" → @explore 子Agent
    │
    └─ "查一下这个库的最新文档" → @scout 子Agent

Plan Agent 的设计理念尤其值得注意。当你切换到 Plan 模式时,Agent 的所有文件编辑和 bash 命令都需要用户审批。这意味着你可以放心地让 AI 分析你的代码库、提出重构建议,而不用担心它会意外修改文件。

2.4 工具系统:内置 14 种核心工具

OpenCode 的工具系统是其核心能力的体现。内置了 14 种工具,覆盖了编程工作流的方方面面:

文件操作工具:

// read - 读取文件内容,支持行范围
// 用法:读取 src/index.ts 的第 10-50 行
read({ path: "src/index.ts", offset: 10, limit: 40 })

// write - 创建新文件或覆盖已有文件
write({ path: "src/utils.ts", content: "export function ..." })

// edit - 精确文本替换(最常用的修改方式)
edit({
  path: "src/index.ts",
  oldText: "const old = 'value'",
  newText: "const new = 'value'"
})

// apply_patch - 应用补丁文件
apply_patch({
  patchText: "*** Update File: src/index.ts\n--- a/src/index.ts\n+++ b/src/index.ts\n@@ -1,3 +1,3 @@\n- old line\n+ new line"
})

搜索工具:

// grep - 正则表达式搜索文件内容
grep({ pattern: "function\\s+handleError", include: "*.ts" })

// glob - 按模式查找文件
glob({ pattern: "src/**/*.test.ts" })

系统工具:

// bash - 执行 shell 命令
bash({ command: "npm test" })

// webfetch - 获取网页内容
webfetch({ url: "https://docs.example.com/api" })

// websearch - 搜索互联网(需要 OpenCode 或 Exa AI)
websearch({ query: "TypeScript 6.0 new features" })

智能工具:

// lsp - 实验性 LSP 集成(代码智能感知)
lsp({
  method: "goToDefinition",
  params: { textDocument: { uri: "..." }, position: { line: 42, character: 10 } }
})

// skill - 加载技能文件
skill({ name: "testing" })

// todowrite - 管理任务列表
todowrite({ todos: [
  { content: "实现用户认证", status: "in_progress", priority: "high" },
  { content: "添加单元测试", status: "pending", priority: "medium" }
]})

// question - 向用户提问
question({
  question: "你想使用哪种数据库?",
  header: "数据库选择",
  options: ["PostgreSQL", "MySQL", "SQLite"]
})

2.5 LSP 集成:给 AI 装上「代码智能」

这是 OpenCode 最具技术深度的特性之一。传统的 AI 编程工具通过读取文件内容来理解代码,但这种方式缺少类型信息、引用关系、定义跳转等「代码智能」。

OpenCode 通过集成 LSP(Language Server Protocol),让 AI 能够像 IDE 一样理解代码:

// AI 可以通过 LSP 工具执行以下操作:
// 1. 跳转到定义
lsp({ method: "goToDefinition", params: { ... } })

// 2. 查找所有引用
lsp({ method: "findReferences", params: { ... } })

// 3. 悬停查看类型信息
lsp({ method: "hover", params: { ... } })

// 4. 文档符号
lsp({ method: "documentSymbol", params: { ... } })

// 5. 工作区符号搜索
lsp({ method: "workspaceSymbol", params: { ... } })

// 6. 跳转到实现
lsp({ method: "goToImplementation", params: { ... } })

// 7. 调用层次分析
lsp({ method: "prepareCallHierarchy", params: { ... } })
lsp({ method: "incomingCalls", params: { ... } })
lsp({ method: "outgoingCalls", params: { ... } })

LSP 工具目前标记为实验性,需要通过环境变量启用:

OPENCODE_EXPERIMENTAL_LSP_TOOL=true opencode

配置 LSP 服务器也很简单。以 TypeScript 项目为例:

{
  "lsp": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"],
      "filetypes": [".ts", ".tsx", ".js", ".jsx"]
    }
  }
}

当 AI 分析代码时,它会自动调用 LSP 来获取:

  • 精确的类型定义(而不是靠猜)
  • 完整的引用链(知道谁在用这个函数)
  • 调用层次(知道这个函数调用了什么,又被谁调用)

这让 AI 的代码理解能力从「文本匹配」提升到了「语义理解」的层次。


三、模型生态与 Zen 网关

3.1 75+ 模型提供商支持

OpenCode 通过 Models.dev 协议支持 75+ 个 LLM 提供商。这意味着你几乎可以使用任何主流的 AI 模型:

{
  "provider": {
    "openai": {
      "apiKey": "{env:OPENAI_API_KEY}"
    },
    "anthropic": {
      "apiKey": "{env:ANTHROPIC_API_KEY}"
    },
    "google": {
      "apiKey": "{env:GOOGLE_API_KEY}"
    },
    "deepseek": {
      "apiKey": "{env:DEEPSEEK_API_KEY}"
    }
  }
}

更强大的是,你可以同时配置多个提供商,然后在会话中随时切换模型:

# 在 TUI 中切换模型
/models

# 或者使用快捷键
Ctrl+M

3.2 Zen 网关:模型选择焦虑的解药

面对 75+ 个提供商和数百个模型,开发者最大的痛点不是「能不能用」,而是「该用哪个」。OpenCode Zen 就是为了解决这个问题而生的。

Zen 是 OpenCode 团队提供的一个 AI 网关,它做了三件事:

  1. 测试筛选:团队测试了大量模型,筛选出在编程 Agent 场景下表现最好的
  2. 性能调优:与模型提供商合作,确保模型以最佳配置运行
  3. 统一定价:通过 Zen 网关统一计费,不需要分别管理多个 API Key

Zen 支持的模型包括:

类别模型特点
OpenAIGPT-5.5, GPT-5.5 Pro, GPT-5.4, GPT-5.3 Codex编程能力最强
AnthropicClaude Fable 5, Claude Opus 4.8, Claude Sonnet 5长上下文推理
GoogleGemini 3.5 Flash, Gemini 3.1 Pro多模态支持
DeepSeekDeepSeek V4 Pro, DeepSeek V4 Flash高性价比
QwenQwen3.7 Max, Qwen3.6 Plus中文优化
GLMGLM 5.2, GLM 5.1国产替代
MiniMaxMiniMax M3, M2.7, M2.5新兴力量

使用 Zen 非常简单:

# 1. 在 TUI 中连接 Zen
/connect
# 选择 opencode,然后去 opencode.ai/auth 获取 API Key

# 2. 查看推荐模型
/models

# 3. 选择模型开始使用

3.3 GitHub Copilot 和 ChatGPT Plus 集成

一个特别贴心的功能是,OpenCode 支持直接使用你已有的 GitHub Copilot 或 ChatGPT Plus/Pro 订阅:

# 使用 GitHub Copilot 账号登录
/connect
# 选择 github

# 使用 ChatGPT Plus/Pro 账号登录
/connect
# 选择 openai

这意味着如果你已经在为 GitHub Copilot 付费,不需要额外购买 API Key 就能使用 OpenCode。


四、MCP 协议与工具扩展

4.1 MCP 简介

MCP(Model Context Protocol)是一个开放协议,允许 AI 应用与外部工具和数据源进行标准化通信。OpenCode 完整支持 MCP 协议,这意味着你可以接入数百个现成的 MCP 服务器来扩展 AI 的能力。

4.2 本地 MCP 服务器

opencode.json 中配置本地 MCP 服务器:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "github": {
      "type": "local",
      "command": ["npx", "-y", "@modelcontextprotocol/server-github"],
      "environment": {
        "GITHUB_TOKEN": "{env:GITHUB_TOKEN}"
      },
      "enabled": true
    },
    "filesystem": {
      "type": "local",
      "command": ["npx", "-y", "@modelcontextprotocol/server-filesystem", "/path/to/dir"],
      "enabled": true
    }
  }
}

4.3 远程 MCP 服务器

远程 MCP 服务器通过 HTTP 连接,支持 OAuth 认证:

{
  "mcp": {
    "sentry": {
      "type": "remote",
      "url": "https://mcp.sentry.dev/sse",
      "enabled": true
    },
    "context7": {
      "type": "remote",
      "url": "https://mcp.context7.com/mcp",
      "enabled": true
    }
  }
}

4.4 OAuth 自动认证

OpenCode 支持 MCP 服务器的 OAuth 自动认证流程:

  1. 当检测到 401 响应时,自动发起 OAuth 流程
  2. 支持 Dynamic Client Registration(RFC 7591)
  3. Token 安全存储在 ~/.local/share/opencode/mcp-auth.json
# 手动触发认证
opencode mcp auth my-oauth-server

# 查看所有 MCP 服务器的认证状态
opencode mcp list

# 删除存储的凭证
opencode mcp logout my-oauth-server

4.5 MCP 使用注意事项

MCP 工具会增加上下文的 token 消耗。某些 MCP 服务器(如 GitHub MCP)会添加大量 token,容易超出上下文限制。建议:

  • 只启用你真正需要的 MCP 服务器
  • 对于 token 消耗大的服务器,使用 enabled: false 默认禁用,需要时再启用
  • 定期检查上下文使用情况

五、Agent 技能系统

5.1 技能文件(SKILL.md)

OpenCode 支持通过 SKILL.md 文件定义可复用的技能。技能是一种模块化的能力扩展机制,类似于给 AI 安装「插件」。

一个典型的 SKILL.md 文件结构:

# 测试技能

## 概述
为项目生成完整的单元测试。

## 使用方法
1. 分析目标函数的输入输出
2. 生成边界条件测试用例
3. 生成错误处理测试用例
4. 使用项目的测试框架编写测试

## 规则
- 测试文件命名为 *.test.ts
- 每个测试用例只测试一个行为
- 使用 describe/it 组织测试结构

5.2 自定义工具

除了内置工具和 MCP 工具,OpenCode 还支持在配置文件中定义自定义工具:

{
  "customTools": {
    "deploy": {
      "description": "部署项目到生产环境",
      "parameters": {
        "type": "object",
        "properties": {
          "environment": {
            "type": "string",
            "enum": ["staging", "production"]
          }
        },
        "required": ["environment"]
      },
      "handler": "scripts/deploy.sh"
    }
  }
}

六、多会话与协作

6.1 多会话并行

OpenCode 支持在同一个项目中启动多个并行会话。每个会话有独立的上下文和历史记录,可以同时处理不同的任务:

# 终端1:实现新功能
opencode
> 帮我实现用户认证模块

# 终端2:修复 bug
opencode
> 修复登录页面的样式问题

# 终端3:写文档
opencode
> 为 API 接口生成文档

6.2 会话分享

OpenCode 的一个独特功能是会话分享。你可以生成一个链接,让团队成员查看你的对话历史:

# 在 TUI 中分享当前会话
/share
# 会生成类似 https://opencode.ai/s/4XP1fce5 的链接

这在以下场景特别有用:

  • 代码评审:分享你与 AI 的对话,让 reviewer 了解你的思路
  • 知识传递:新成员可以通过查看历史对话学习项目
  • 调试协作:分享调试过程,让同事帮你分析

6.3 GitHub 和 GitLab 集成

OpenCode 深度集成了 GitHub 和 GitLab:

  • 自动 PR 评审:分析 Pull Request 的变更
  • Issue 理解:读取 Issue 描述并理解需求
  • CI/CD 集成:在 CI 流水线中作为自动化 Agent 运行

七、权限与安全

7.1 权限系统

OpenCode 提供了细粒度的权限控制:

{
  "permission": {
    "edit": "allow",        // 允许文件编辑
    "bash": "ask",          // bash 命令需要审批
    "webfetch": "allow",    // 允许网页获取
    "websearch": "deny",    // 禁止网络搜索
    "mymcp_*": "ask"        // MCP 工具需要审批
  }
}

权限值说明:

  • allow:允许执行,无需确认
  • ask:每次执行前需要用户确认
  • deny:禁止执行

7.2 策略系统

对于企业用户,OpenCode 支持策略(Policies)系统,可以强制执行组织级别的安全规则:

  • 禁止访问特定目录
  • 限制可执行的命令
  • 强制代码审查流程

7.3 隐私优先

OpenCode 的一个核心设计原则是隐私优先

  • 不存储任何代码或上下文数据
  • 所有处理在本地完成
  • 支持在隐私敏感环境中使用
  • 企业版支持私有化部署

八、实战工作流

8.1 工作流一:新功能开发(Plan + Build)

这是 OpenCode 最推荐的工作流:

# 第一步:切换到 Plan 模式
# 按 Tab 键切换到 Plan Agent

# 第二步:描述需求
> 我想给应用添加一个通知系统。要求:
> 1. 支持邮件和站内通知
> 2. 用户可以配置通知偏好
> 3. 通知内容支持模板

# AI 会分析代码库并给出实现方案,但不会修改任何文件

# 第三步:Review 方案,提供反馈
> 方案不错,但我希望用 WebSocket 实现实时通知,而不是轮询

# 第四步:切换到 Build 模式
# 按 Tab 键切换到 Build Agent

# 第五步:开始实现
> 按照上面的方案开始实现

8.2 工作流二:代码重构

# 使用 @ 引用特定文件
> 帮我重构 @packages/functions/src/api/index.ts
> 
> 当前问题:
> 1. 函数太长,超过 200 行
> 2. 错误处理不统一
> 3. 缺少类型定义
> 
> 重构要求:
> 1. 拆分为多个小函数
> 2. 统一使用 AppError 类
> 3. 添加完整的 TypeScript 类型

# 如果结果不满意,使用 /undo 回退
/undo

# 调整需求后重新尝试
> 拆分时请保持原有的 API 接口不变,只重构内部实现

8.3 工作流三:Bug 调试

# 先用 Explore 子Agent 搜索相关代码
@explore 搜索所有与用户认证相关的代码

# 然后用 Plan 模式分析问题
> 用户报告登录后会话偶尔会丢失,帮我分析可能的原因

# 切换到 Build 模式修复
> 根据分析结果,修复会话丢失的问题

8.4 工作流四:文档生成

# 使用 Scout 子Agent 研究文档标准
@scout 查一下 JSDoc 的最佳实践

# 然后生成文档
> 为 @src/utils/ 目录下的所有工具函数生成 JSDoc 文档
> 要求:
> 1. 包含参数说明和返回值说明
> 2. 包含使用示例
> 3. 标注可能抛出的异常

九、性能优化与最佳实践

9.1 上下文管理

上下文窗口是 AI 编程工具最宝贵的资源。OpenCode 提供了多种机制来优化上下文使用:

  1. 按需加载:使用 @ 引用特定文件,而不是让 AI 自己搜索
  2. 子 Agent 委托:将搜索和研究任务委托给 Explore/Scout 子Agent
  3. 上下文压缩:当上下文过长时,OpenCode 会自动压缩历史对话
# 好的做法:精确引用
> 修改 @src/api/users.ts 中的 getUser 函数

# 不好的做法:模糊描述
> 修改获取用户的那个函数

9.2 模型选择策略

根据任务类型选择合适的模型:

任务类型推荐模型原因
复杂重构Claude Fable 5长上下文推理能力强
快速补全GPT-5.4 Mini响应速度快
代码审查Claude Opus 4.8细节分析准确
文档生成GPT-5.3 Codex代码理解能力强
日常开发DeepSeek V4 Flash性价比高

9.3 快捷键提升效率

掌握常用快捷键可以大幅提升效率:

快捷键功能
Tab切换主 Agent(Build/Plan)
@模糊搜索并引用文件
/打开命令面板
Ctrl+C取消当前操作
Ctrl+L清屏
Ctrl+M切换模型

9.4 配置文件最佳实践

推荐的项目级 opencode.json 配置:

{
  "$schema": "https://opencode.ai/config.json",
  "permission": {
    "edit": "allow",
    "bash": "ask",
    "webfetch": "allow"
  },
  "lsp": {
    "typescript": {
      "command": "typescript-language-server",
      "args": ["--stdio"],
      "filetypes": [".ts", ".tsx"]
    }
  },
  "mcp": {
    "context7": {
      "type": "remote",
      "url": "https://mcp.context7.com/mcp",
      "enabled": true
    }
  }
}

十、与竞品对比

10.1 OpenCode vs Claude Code

维度OpenCodeClaude Code
开源MIT 开源闭源
模型支持75+ 提供商仅 Anthropic
价格免费(自带 API Key)订阅制
LSP 集成支持不支持
多会话支持有限支持
会话分享支持不支持
TUI 体验Bubble Tea,丰富较简单

10.2 OpenCode vs Gemini CLI

维度OpenCodeGemini CLI
开源MIT 开源Apache 2.0
模型支持75+ 提供商仅 Google
上下文窗口取决于模型100万 token
Agent 系统5种内置 Agent基础 Agent
工具系统14种内置 + MCPMCP 支持
联网搜索Exa AIGoogle Search

10.3 OpenCode vs Codex CLI

维度OpenCodeCodex CLI
开源MIT 开源Apache 2.0
模型支持75+ 提供商仅 OpenAI
TUI 体验丰富简洁
Agent 系统Plan/Build 双模式单一模式
企业功能策略、权限有限

十一、未来展望

11.1 Desktop App 和 IDE 扩展

OpenCode 正在从纯终端工具向全平台发展:

  • Desktop App:macOS、Windows、Linux 的原生桌面应用(Beta 阶段)
  • IDE 扩展:VS Code 等 IDE 的插件版本
  • Web 版本:浏览器中运行的版本

11.2 SDK 和插件生态

OpenCode 提供了 SDK,允许开发者:

  • 构建自定义工具
  • 开发插件扩展
  • 集成到自己的产品中

11.3 企业版功能

对于企业用户,OpenCode 提供了:

  • 私有化部署
  • 团队管理和权限控制
  • 审计日志
  • 合规性支持

总结

OpenCode 不是又一个 AI 编程助手。它是一个重新思考「AI 应该如何融入开发者工作流」的开源项目。

它的核心创新在于:

  1. 模型无关:不绑定任何特定的 AI 提供商,让开发者自由选择
  2. LSP 感知:通过 Language Server Protocol 给 AI 装上「代码智能」
  3. Plan/Build 双模式:把「想清楚」和「写代码」分离,减少错误
  4. 多会话并行:让多个 Agent 同时处理不同任务
  5. 隐私优先:不存储任何代码数据,适合企业环境

在 AI 编程工具百花齐放的2026年,OpenCode 用160K Stars 证明了一件事:开源、开放、模型无关的 AI 编程工具有巨大的市场需求。 开发者不想被锁定在某个特定的 AI 提供商生态中,他们想要的是一个能够适应自己工作流的工具,而不是一个要求自己改变工作流的工具。

如果你还没有尝试过 OpenCode,现在就是最好的时机。一行命令即可安装:

curl -fsSL https://opencode.ai/install | bash

终端里的 AI 编程革命,已经开始了。


本文基于 OpenCode v1.17.13 版本撰写,功能可能随版本更新而变化。完整文档请访问 opencode.ai/docs

推荐文章

CSS 奇技淫巧
2024-11-19 08:34:21 +0800 CST
120个实用CSS技巧汇总合集
2025-06-23 13:19:55 +0800 CST
JavaScript 策略模式
2024-11-19 07:34:29 +0800 CST
JavaScript设计模式:适配器模式
2024-11-18 17:51:43 +0800 CST
程序员茄子在线接单