标签 Python 下的文章

AI 基础设施的语言之争:为何构建 LLM 网关时,我们放弃了 Python 选择了 Go?

本文永久链接 – https://tonybai.com/2026/02/18/why-we-chose-go-over-python-for-llm-gateways

大家好,我是Tony Bai。

在 2026 年的今天,人工智能早已走出了实验室,成为企业级应用的核心驱动力。Python,凭借其在机器学习领域的绝对统治地位——拥有 PyTorch、TensorFlow、Hugging Face 等无可匹敌的生态系统——长期以来被视为 AI 开发的“默认语言”。

然而,随着 AI 应用从模型训练(Training)走向推理服务(Inference)和应用编排(Orchestration),工程重心发生了微妙的转移。当我们谈论模型本身时,Python 是王者;但当我们谈论承载模型流量的基础设施——网关、代理、路由器时,Python 还是最佳选择吗?

近日,开源 LLM 网关项目 Bifrost 的维护者在 Reddit 上分享了一篇题为《Why we chose Go over Python for building an LLM gateway》的技术复盘,引发了社区的强烈反响。他们放弃了拥有 LiteLLM 等成熟竞品的 Python 生态,转而使用 Go 重写了核心网关。结果令人咋舌:延迟降低了约 700 倍,内存占用降低了 68%,吞吐量提升了 3 倍。

这场技术选型的背后,折射出的是 AI 工程化进入深水区后,对并发模型、资源效率与部署架构的重新审视。

Python 的“舒适区”与“性能墙”

在项目的初期,选择 Python 似乎是理所当然的。

1. 生态惯性与“胶水”优势

绝大多数 AI 工程师都是 Python Native。从 LangChain 到 LlamaIndex,几乎所有的 Agent 开发框架都优先支持 Python。使用 Python 构建网关,意味着可以直接复用现有的库,甚至可以直接挂载一些轻量级的 Python 逻辑来处理 Embeddings 或 RAG(检索增强生成)流程。FastAPI 的易用性更是让开发者能在几分钟内搭建起一个服务。

2. 遭遇瓶颈:网关的本质是 I/O

然而,LLM 网关的业务属性决定了它的性能痛点。与计算密集型(CPU-bound)的模型推理不同,网关是典型的 I/O 密集型应用。它的核心职责是:

  • 接收成千上万的客户端请求。
  • 将请求转发给上游提供商(如 OpenAI, Anthropic, 或自建的 vLLM)。
  • 等待上游响应(这是最耗时的环节,LLM 的首字延迟 TTFT 通常在秒级)。
  • 将流式响应(SSE)回传给客户端。

在这个过程中,网关绝大部分时间都在“等待”。

3. Python 的并发痛点

Bifrost 团队在测试中发现,当并发请求数达到 500-1000 RPS(每秒请求数)时,Python 的瓶颈开始显现。

  • GIL(全局解释器锁)的幽灵:虽然 Python 的 asyncio 可以处理 I/O 并发,但 GIL 依然限制了多核 CPU 的利用率。对于需要处理大量并发连接、同时可能涉及少量数据处理(如 Token 计数、PII 过滤)的网关来说,线程竞争(Thread Contention)成为了不可忽视的开销。
  • 昂贵的上下文切换:在 Python 中维持数千个并发连接,其上下文切换的开销远高于编译型语言。

Go 的降维打击——数据背后的技术真相

Bifrost 团队最终选择了 Go。这一决定并非出于对语言的偏好,而是基于冷冰冰的 Benchmark 数据。让我们深入分析他们披露的核心指标。

延迟(Latency):微秒与毫秒的鸿沟

数据对比
* Bifrost (Go): ~11 微秒 (0.011ms) / 请求
* LiteLLM (Python): ~8 毫秒 / 请求

这是一个惊人的 700 倍 差距。

虽然 8 毫秒在人类感知中似乎微不足道,但在高并发架构中,这被称为“开销放大”。

  • 累积效应:在一个复杂的 AI Agent 工作流中,可能涉及几十次 LLM 调用。如果每一层网关都增加 8ms 的延迟,累积起来就是可感知的卡顿。
  • 高负载下的劣化:在 10,000 个并发请求下,Go 引入的总处理时间仅为 110ms,而 Python 方案则产生了惊人的 80 秒总 CPU 时间开销。这意味着 Python 方案需要消耗更多的 CPU 核心来维持同样的响应速度,否则请求就会排队,导致尾部延迟(Tail Latency)飙升。

此外,Go 的 net/http 标准库在处理 HTTP 请求时经过了极致优化。Go 不需要像 Python 那样依赖 ASGI/WSGI 服务器(如 Uvicorn),其原生的 HTTP 处理能力配合 Goroutine,使得每个请求的内存分配和 CPU 周期都降到了最低。

并发模型:Goroutine vs Asyncio

架构对比
* Go: 10,000 个 Goroutines,每个仅占用 ~2KB 栈空间。
* Python: 受限于 OS 线程开销或 Event Loop 的单核瓶颈。

LLM 网关的特殊性在于长连接。LLM 的流式输出可能持续数秒甚至更久。这意味着网关必须同时维护成千上万个活跃连接。

Go 的 GMP(Goroutine-Machine-Processor)调度模型天生适合这种场景。成千上万个 Goroutine 可以复用少量的系统线程,上下文切换由 Go Runtime 在用户态极速完成,几乎不消耗系统内核资源。

相比之下,Python 即使使用了 uvloop,在面对海量并发连接的数据搬运时,其解释器的开销依然是一个沉重的包袱。

内存效率与成本

数据对比
* Go: 内存占用降低 ~68%。
* 生产环境: Go 跑在 t3.medium (2 vCPU, 4GB) 上即可;Python 则需要 t3.xlarge。

对于大规模部署 AI 服务的企业来说,这意味着基础设施成本直接减半。

Python 的动态类型系统和垃圾回收机制导致其对象内存占用较大。而 Go 的结构体布局紧凑,且编译器能进行逃逸分析(Escape Analysis),将大量对象分配在栈上而非堆上,从而显著降低了 GC 压力和内存占用。

社区深度探讨——AI 时代的语言版图重构

这篇帖子在 r/golang 引发了极高质量的讨论,评论区揭示了行业内更深层次的趋势。

“AI 能够写代码”改变了竞争规则

过去,Python 的一大优势是“开发效率高”。写 Python 代码通常比写 Go 或 Rust 快。

但在 2026 年,“Agentic Coding”(即利用 AI Coding Agent 辅助编程)已经成为主流。

有开发者指出:“LLM 让编写 Rust 和 Go 变得非常高效,你完全可以享受到高性能语言的红利,而不用支付编写它们的‘学习成本’。”

这是一个极其深刻的洞察。

  • Rust 的借用检查器:以前是新手的噩梦,现在 LLM 可以很好地处理生命周期标注。
  • Go 的样板代码:if err != nil 虽然繁琐,但 Copilot/Cursor/Claude Code等 可以一键生成。

当“编写代码”不再是瓶颈时,“运行时性能”和“稳定性”的权重就被无限放大了。这进一步削弱了 Python 在后端基础设施层的竞争力。

Rust 还是 Go?

既然要高性能,为什么不直接上 Rust?

评论区对此展开了激辩。虽然 Rust 在理论上拥有比 Go 更高的性能上限和内存安全性(无 GC),但 Go 在“开发效率”与“运行效率”之间找到了完美的平衡点。

  • Rust: 适合构建数据库、搜索引擎内核等对延迟极其敏感且逻辑复杂的底层组件。但 Rust 的“认知负担”依然较重,且编译速度较慢。
  • Go: 提供了 80% 的 Rust 性能,但只有 20% 的开发难度。对于网关、代理这类中间件,Go 的标准库(特别是 net/http)极其成熟,编译速度极快,且自带 GC 能让开发者从内存管理的细节中解脱出来,专注于业务逻辑(如限流、计费)。

对于大多数 AI 网关场景,Go 是性价比最高的选择。

Python 的归宿:模型与胶水

这是否意味着 Python 将被淘汰?绝不。

社区共识非常明确:Python 的护城河在于 ML 生态。

  • 模型训练与微调:PyTorch/JAX 无可替代。
  • 数据科学与探索:Jupyter Notebook 是数据科学家的后花园。
  • 快速原型开发:在验证想法阶段,Python 依然是最快的。

但在生产环境部署(Production Serving)阶段,架构正在发生分离:

  • 控制平面(Control Plane):由 Go/Rust 接管,负责流量调度、鉴权、日志、监控。
  • 数据平面(Data Plane):核心推理引擎(如 vLLM)虽然内部可能有 C++/CUDA 优化,但外层接口仍常由 Python 封装。

Go 在 AI 领域的未来展望

Bifrost 的案例只是冰山一角。我们正在目睹 Go 语言在 AI 领域的“新基建”运动。

静态二进制文件的魅力

Deployment simplicity 是作者提到的另一个关键点。

部署 Python 应用通常意味着:配置 Docker -> 安装 Python -> pip install requirements.txt -> 解决依赖冲突 -> 虚拟环境管理。

而部署 Go 应用:COPY bifrost /usr/local/bin/ -> Run。

在容器化和 K8s 盛行的今天,Go 的静态链接二进制文件极大地简化了 CI/CD 流程,减小了镜像体积,提升了冷启动速度(这对于 Serverless AI 推理尤为重要)。

AI 专有工具链的完善

虽然 Go 在 Tensor 操作库上不如 Python 丰富,但在应用层工具上正在迅速补齐。

  • LangChainGo: 社区正在移植 LangChain 的核心能力。
  • Vector Database Clients: Milvus, Weaviate, Pinecone 等向量数据库都有优秀的 Go SDK。
  • 主流大模型 GenAI SDK: 像Google等主流大模型厂商官方对 Go 的支持力度都很大,Gemini、Claude、OpenAI 等模型的 Go SDK 体验都还不错。

架构师的决策建议

如果你正在构建一个 AI 应用平台:

  • 不要用 Python 写网关:不要让 GIL 成为你高并发路上的绊脚石。
  • 不要用 Go 写模型训练:不要试图挑战 PyTorch 的地位,那是徒劳的。
  • 采用“三明治架构”:
    • 上层:Go 处理高并发 HTTP 请求、WebSocket、SSE。
    • 中层:Go 处理业务逻辑、数据库交互、Redis 缓存。
    • 底层:Python/C++ 容器专门负责模型推理,通过 gRPC 与 Go 层通信。

小结

Bifrost 从 Python 到 Go 的迁移,不仅仅是一次代码重写,更是一次架构理念的升级。它证明了在 AI 浪潮中,基础设施的性能与模型的智能同等重要。

随着 LLM 应用规模的爆发式增长,计算成本和响应延迟将成为企业关注的焦点。Go 语言凭借其高效的并发模型、极低的资源占用和极简的部署体验,正在成为 AI 基础设施层的“事实标准”。

对于 Gopher 而言,这是一个最好的时代。我们不需要成为算法专家,只需要发挥 Go 语言最擅长的能力——构建高性能、高可靠的管道,就能在 AI 时代占据不可或缺的一席之地。

资料链接:https://www.reddit.com/r/golang/comments/1r27pqx/why_we_chose_go_over_python_for_building_an_llm/


你认为 Python 会被“边缘化”吗?

随着 Agentic Coding 的普及,高性能语言的入门门槛正在消失。在你的 AI 实践中,是否也感受到了 Python 在生产部署时的无奈?你认为 Go 在 AI 领域还会攻下哪些阵地?

欢迎在评论区分享你的看法!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

Go 微服务重构实录:当后端性能提升 10 倍,移动端体验为何反而崩塌?

本文永久链接 – https://tonybai.com/2026/02/13/go-microservices-refactoring-10x-backend-vs-mobile-collapse

大家好,我是Tony Bai。

在软件工程的世界里,“快”通常被视为绝对的褒义词。我们追求更低的延迟、更高的吞吐量、更少的 CPU 占用。当一个团队决定将遗留的 Python 单体应用重构为 Go 微服务时,他们的目标显而易见:性能提升。

然而,最近在 Go 开发者社区(r/golang)引发热议的一个真实案例,却给所有追求极致性能的架构师和开发者泼了一盆冷水。发帖人分享了一个令人咋舌的经历:他们的团队花费四个月时间,成功将核心 API 从 Django 迁移到了 Go(使用 Fiber 框架)。结果是梦幻般的:P95 延迟从 180ms 骤降至 14ms,吞吐量翻了三倍,CPU 资源节省了 60%。

CTO 发了全员通告庆祝,后端团队沉浸在成功的喜悦中。但在两周后,移动端团队却发出了红色警报:App 变得卡顿、掉帧,甚至导致安卓设备电量疯狂消耗。

后端性能提升了 10 倍,用户体验却发生了退化。这听起来像是一个悖论,但其背后隐藏着深刻的系统设计原理和软件工程教训。本文将深入剖析这一案例,探讨当“速度”成为一种破坏力时,我们该如何应对。

完美的重构与意料之外的崩溃

从 Django 到 Go 的跨越

该团队的重构背景在业界非常典型。随着业务增长,基于 Python/Django 的单体应用逐渐显露出性能瓶颈。Python 的 GIL(全局解释器锁)以及动态语言的特性,在处理高并发请求时往往力不从心。

选择 Go 语言进行重构是极其合理的决策。Go 语言天生具备高并发处理能力(Goroutines),静态编译带来的执行效率,以及相对更低的内存占用,使其成为构建云原生微服务的首选。

团队选择了 Fiber 框架,这是 Go 生态中以高性能著称的 Web 框架,基于 Fasthttp 构建,旨在追求极致的零内存分配(Zero Allocation)和极速响应。

重构后的 Benchmark 数据证明了决策的正确性:

  • P95 Latency: 180ms -> 14ms(提升约 12 倍)
  • Throughput: 3x(吞吐量翻倍)
  • Resource: CPU -60%(成本大幅降低)

从后端工程师的 KPI 来看,这是一场完美的胜利。

移动端的“蝴蝶效应”

然而,系统是一个整体。当后端交付了“法拉利引擎”般的 API 时,前端(React Native + Redux)却依然是那辆为“拖拉机”设计的旧车。

全量上线两周后,问题集中爆发:

  1. 交互卡顿:用户在滚动 Feed 流时出现明显的掉帧。
  2. 视觉不稳定:页面元素加载过快,导致屏幕闪烁,给人一种“未在大脑中处理完毕”的错觉。
  3. 设备发热与耗电:尤其在中低端 Android 设备上,电池消耗显著增加。

移动端 Team Lead 对此感到困惑:API 响应客观上变快了,理论上 App 的数据加载应该更丝滑,为什么体验反而劣化了?

深度复盘——当“慢”成为一种隐性依赖

经过一周的排查,团队终于找到了问题的根源,答案简单却令人哭笑不得:前端架构是隐式建立在“后端很慢”这一假设之上的。

隐性依赖

在旧的架构中,Django API 的响应速度较慢(约 150ms – 200ms)。由于网络延迟和处理时间,客户端发出的连续请求之间天然存在着“时间间隙”。

移动端的状态管理层(基于 React Native 和旧版 Redux)适应了这种节奏。它假设数据会以“人类可感知的速度” 陆续到达。这种慢速响应在无意中起到了一种天然的节流(Throttling)作用。

渲染管线的崩溃

当后端切换到 Go 之后,情况发生了质变。

假设一个典型的页面初始化需要调用 3 个 API 接口:User Profile、Feed Data、Notifications。

  • 在 Python 时代:这 3 个请求串行或并行发出,由于服务器处理慢,它们返回的时间点较为分散,总耗时可能在 500ms 左右。Redux 接收到第一个响应,更新 State,触发 React 重新渲染(Re-render);几百毫秒后,第二个响应到达,再次触发渲染。UI 线程有足够的呼吸时间。
  • 在 Go 时代:这 3 个请求几乎在瞬间完成,总耗时不到 50ms。

对于 React Native 的渲染桥(Bridge)和主线程来说,这意味着在极短的时间窗口内,连续收到了 3 次密集的状态更新指令。

由于该团队使用的是旧版 Redux(未使用 RTK Query 等现代缓存/批处理工具),每一次 API 返回都触发了一个 dispatch 动作,进而触发一次完整的 React 组件树 Diff 和渲染过程。

后果是灾难性的:

  1. UI 线程阻塞:3 次高计算量的 Re-render 在几十毫秒内连续发生,瞬间占满了 JS 线程和 UI 线程的资源。
  2. React Native Bridge 拥堵:大量的序列化数据在 JS 和 Native 之间传输,导致通信通道“窒息”。
  3. 动画丢帧:此时如果用户正在滑动列表,GPU 和 CPU 都在处理布局计算,无法响应滑动手势,导致直观的“卡顿”。

这就好比你习惯了有人每隔 10 秒给你递一块砖头让你砌墙,突然间,对方换成了机关枪,一秒钟向你发射 100 块砖头,你不仅接不住,还会被砸伤。

技术层面的反思与海勒姆定律

这个案例是海勒姆定律(Hyrum’s Law)的完美教科书示例。

海勒姆定律
当一个 API 有足够多的用户时,你在契约(Contract)中承诺什么并不重要:你系统所有的可观测行为(Observable Behaviors)都将被某些用户所依赖。

在这个案例中,API 文档(契约)从未承诺“响应时间必须大于 100ms”。但是,“响应慢”是旧系统的可观测行为。移动端代码(有意或无意地)依赖了这个行为来实现流畅的渲染流。当 Go 重构改变了这一行为(尽管是向好的方向改变),它实际上破坏了系统间的“隐性契约”,导致了破坏性的变更。

为什么中低端设备受害最深?

发帖人提到,他们在开发测试时使用的是高端手机,这些设备拥有强大的 CPU 和 GPU,能够强行消化 Go 后端带来的密集数据轰炸,因此在开发阶段掩盖了问题。

而真实用户大量使用的中低端 Android 手机,其 GPU Headroom(GPU 动态余量)非常有限。当短时间内爆发大量布局计算(Layout Calculation)和视图绘制指令时,硬件性能瞬间见顶,直接导致掉帧。这也解释了为什么电池消耗会剧增——CPU 长时间处于高负荷的瞬时峰值状态。

解决方案——不走回头路

面对这种局面,最糟糕的决策是在 Go 后端增加 time.Sleep() 来模拟旧系统的延迟。这不仅是技术的倒退,更是对计算资源的侮辱。

该团队最终采取了正确的工程化修复方案,主要集中在移动端架构重构和API 聚合。

移动端的“防洪堤”:批处理与防抖

修复的核心在于让前端能够优雅地处理高速数据流,而不是被其淹没。

  1. 状态更新批处理:
    重构移动端代码,不再对每一个 API 响应立即执行 dispatch。而是将短时间内的多个状态变更合并为一次 Update。在 React 18+ 中,这种自动批处理(Automatic Batching)已经成为默认行为,但在旧版 Redux 中需要手动实现或引入中间件。

  2. 防抖渲染:
    设置一个微小的时间窗口(例如 16ms,即一帧的时间),在该窗口内到达的所有数据只触发一次视图更新。这确保了无论后端多快,前端的渲染频率都不会超过屏幕刷新率。

  3. 引入 RTK Query:
    在评论区的讨论中,作者提到他们最终切换到了 Redux Toolkit Query。现代的状态管理库通常内置了去重(Deduplication)和缓存策略,能够更好地处理并发请求,避免不必要的渲染抖动。

后端适配:BFF 模式的回归

既然 Go 处理并发和负载的能力如此之强,后端也承担了一部分优化工作。

  • API 聚合(Aggregation):
    团队合并了一些不必要分离的端点。以前为了解耦,可能会设计 GET /user, GET /settings, GET /feed。现在,既然 Go 处理 JSON 序列化的速度极快,可以将这些数据合并为一个 GET /bootstrap 或类似的大负载接口。

    对于 Go 来说,序列化 50KB 的 JSON 和序列化 5KB 的 JSON 并没有本质的性能鸿沟;但对于移动端来说,将 3 次网络请求 + 3 次渲染循环 减少为 1 次网络请求 + 1 次渲染循环,是质的飞跃。

视觉测试的重要性

作者特别提到了一个关键点:Vision Testing Tool

常规的单元测试或集成测试只能验证“数据是否正确”,无法验证“动画是否流畅”。他们通过在真实的中低端设备上运行视觉测试工具(如 Drizz Dev 等),捕捉到了肉眼在高端机上难以察觉的微小掉帧。这提醒我们,在涉及端侧性能时,真实设备测试(Real Device Testing)是不可或缺的环节。

给架构师与开发者的建议

这个“Go 重构引发前端崩溃”的案例,为整个行业提供了宝贵的经验教训。它提醒我们,微服务架构中的“性能”从来不是孤立的指标。

性能是一种“破坏性变更”

在进行大规模重构时,我们通常只关注功能兼容性(API 字段是否一致)。但时序特性的剧烈变化,同样属于 API 契约的一部分。如果你的新系统比旧系统快 10 倍或慢 10 倍,它都可能破坏上下游的隐式依赖。

全链路视角的必要性

后端开发者的视野不能止步于 JSON 返回的那一刻。你需要了解你的消费者是谁,他们如何处理数据。

  • 如果是浏览器,它有强大的 V8 引擎和充足的内存。
  • 如果是移动端,它受限于电池、散热和不稳定的网络。
  • 如果是 IoT 设备,它可能只有几 KB 的内存。

架构设计必须具备全链路视角(Full-stack Perspective)。

避免“真空中的基准测试”

作者提到,CTO 看到 benchmarks 后非常兴奋并全公司通报。这是一种典型的“真空指标”。真正的成功指标不应该是“API 响应时间”,而应该是“用户可见的交互延迟”或“页面完成加载时间”。

拥抱 Go,但要理解 Go

Go 语言的极致性能是双刃剑。它暴露了系统其他部分的低效。在这个案例中,Go 实际上充当了“压力测试工具”,它无情地暴露了前端架构中遗留的低效状态管理逻辑。

迁移到 Go 是正确的,它迫使团队偿还了前端的技术债务,最终不仅后端快,前端也更健壮了。

小结

“我们的 Go 微服务比旧的 Python 服务快 10 倍,但我们的 App 变差了。”

这句话初听是笑话,细品是哲学。它揭示了分布式系统的复杂性:局部最优不等于全局最优

作为 Gopher,我们为 Go 语言的强悍性能感到自豪。但作为工程师,我们更应心存敬畏。在追求速度的道路上,不仅要跑得快,还要确保坐在副驾驶的“前端兄弟”没有被甩出车外。只有当端到端的用户体验得到提升时,重构才算真正成功。

资料链接:https://www.reddit.com/r/golang/comments/1r2n5ji/our_go_microservice_was_10x_faster_than_the_old/


你遇到过“太快”带来的烦恼吗?

局部最优往往会导致全局崩溃。在你的开发生涯中,是否也遇到过这种“优化反而变差”的尴尬?你是如何处理前后端之间的“步调不一致”的?

欢迎在评论区分享你的“神反转”经历!


还在为“复制粘贴喂AI”而烦恼?我的新专栏 AI原生开发工作流实战 将带你:

  • 告别低效,重塑开发范式
  • 驾驭AI Agent(Claude Code),实现工作流自动化
  • 从“AI使用者”进化为规范驱动开发的“工作流指挥家”

扫描下方二维码,开启你的AI原生开发之旅。


你的Go技能,是否也卡在了“熟练”到“精通”的瓶颈期?

  • 想写出更地道、更健壮的Go代码,却总在细节上踩坑?
  • 渴望提升软件设计能力,驾驭复杂Go项目却缺乏章法?
  • 想打造生产级的Go服务,却在工程化实践中屡屡受挫?

继《Go语言第一课》后,我的《Go语言进阶课》终于在极客时间与大家见面了!

我的全新极客时间专栏 《Tony Bai·Go语言进阶课》就是为这样的你量身打造!30+讲硬核内容,带你夯实语法认知,提升设计思维,锻造工程实践能力,更有实战项目串讲。

目标只有一个:助你完成从“Go熟练工”到“Go专家”的蜕变! 现在就加入,让你的Go技能再上一个新台阶!


商务合作方式:撰稿、出书、培训、在线课程、合伙创业、咨询、广告合作。如有需求,请扫描下方公众号二维码,与我私信联系。

如发现本站页面被黑,比如:挂载广告、挖矿等恶意代码,请朋友们及时联系我。十分感谢! Go语言第一课 Go语言进阶课 AI原生开发工作流实战 从 0 开始构建 Agent Harness Go语言精进之路1 Go语言精进之路2 Go语言第一课 Go语言编程指南
商务合作请联系bigwhite.cn AT aliyun.com
这里是 Tony Bai的个人Blog,欢迎访问、订阅和留言! 订阅Feed请点击上面图片

如果您觉得这里的文章对您有帮助,请扫描上方二维码进行捐赠 ,加油后的Tony Bai将会为您呈现更多精彩的文章,谢谢!

如果您希望通过微信捐赠,请用微信客户端扫描下方赞赏码:

如果您希望通过比特币或以太币捐赠,可以扫描下方二维码:

比特币:

以太币:

如果您喜欢通过微信浏览本站内容,可以扫描下方二维码,订阅本站官方微信订阅号“iamtonybai”;点击二维码,可直达本人官方微博主页^_^:
本站Powered by Digital Ocean VPS。
选择Digital Ocean VPS主机,即可获得10美元现金充值,可 免费使用两个月哟! 著名主机提供商Linode 10$优惠码:linode10,在 这里注册即可免费获 得。阿里云推荐码: 1WFZ0V立享9折!


View Tony Bai's profile on LinkedIn
DigitalOcean Referral Badge

文章

评论

  • 正在加载...

分类

标签

归档



View My Stats