Go 面试题:如何查询当前协程数量,以及这道题真正想考什么
在 Go 中统计当前协程数量,标准做法是调用 `runtime.NumGoroutine()`。但面试里真正想听到的,往往不只是函数名,还包括它统计的范围、与调度器的关系,以及它在协程泄漏排查中的实际用途。 面试里问“如何查询当前有多少个协程”,看起来只是一个函数调用题,真正考的却是你对 Go runtime 调度模型和并发排障思路的理解。
在 Go 中统计当前协程数量,标准做法是调用 `runtime.NumGoroutine()`。但面试里真正想听到的,往往不只是函数名,还包括它统计的范围、与调度器的关系,以及它在协程泄漏排查中的实际用途。 面试里问“如何查询当前有多少个协程”,看起来只是一个函数调用题,真正考的却是你对 Go runtime 调度模型和并发排障思路的理解。

AI 应用开发并不等于做大模型训练。对 Go 开发者来说,真正值得切入的是以 Prompt、RAG、Agent 为核心的应用工程:重点是 API 调用、系统编排、可靠性与成本控制。语言选择上,Go 足以承担主力后端,Python 更适合做原型和补生态。

Agent 并不是一个抽象口号,落到工程实现,核心通常就五层:感知、规划、工具、记忆、执行。本文结合 Go 代码,把这套最小可用架构拆开讲清楚,并补上组件协作方式、落地时的关键约束,以及 Go 生态里的实际选择。

Prompt 注入已经从概念风险变成了 AI 应用里的常见攻击面,尤其在会拼接用户输入、网页内容和外部文档的 Go 服务中更容易出现。本文结合 OWASP 的定义、典型业务场景与 Go 示例代码,梳理直接注入、间接注入和多层防护做法,帮助你判断哪些措施能真正降低风险。

MCP 在生产环境里一旦接入外部工具,鉴权就不再是可选题。本文结合 Go 语言和 mcp-go v0.48.0 的现状,拆解 OAuth 2.1、自定义 Bearer Token、STDIO 环境变量三种实现思路,帮助你按传输方式、规范要求和安全边界做选型。 在 MCP 进入真实业务后,鉴权很快会从“以后再补”变成上线前必须回答的问题:谁能调用工具、调用到哪一层、不同传输方式该怎么做。

想用 Go 做桌面应用,常见选择要么体积偏大,要么跨平台维护成本高。Wails 提供了一条更轻的路线:Go 负责后端逻辑,前端继续用熟悉的 Web 技术,再借助系统原生 WebView 打包成桌面程序,兼顾体积、性能和开发效率。

RAG 的价值不在于让大模型“更聪明”,而在于先把可验证的资料找出来,再让模型基于上下文作答。本文从幻觉问题出发,解释 Naive RAG 的常见短板、生产级优化思路,以及如何用 Go 配合 LangChainGo 快速搭出一条可运行的检索问答链。

把 Go 项目部署到 CentOS,真正容易踩坑的不是“能不能跑”,而是系统版本、依赖方式、权限边界和服务托管是否稳妥。本文按上线流程拆解关键环节,保留可直接执行的命令与配置思路,帮助你判断该在服务器编译、交叉编译,还是直接走容器化部署。

Go 不只是高并发后端语言,也开始成为构建 AI Agent 的现实选择。本文从并发、类型安全和部署效率切入,对比 LangChainGo、Google ADK-Go、Eino 三个代表性框架,并给出按团队栈、项目复杂度和生态诉求做判断的选型思路。

在 Go 里判断 goroutine 是否已经结束,本质上是在解决同步、通知和取消传播三类问题。本文把 `sync.WaitGroup`、Channel、`context.Context`、关闭通道广播以及 `errgroup` 放到同一条决策线上,帮助你按任务数量、是否需要取消、是否要收集错误来选方案。

Go 里双引号字符串和反引号字符串并不是写法偏好之争,而是两种处理规则。双引号支持转义,适合普通文本;反引号保留原样、支持多行,写 SQL、模板和正则时往往更清晰。理解它们的边界,代码会更好读也更少出错。

在 Go 并发编程里,判断 channel 是否关闭,看起来像一个小问题,处理错了却很容易直接触发 panic。本文把双值接收、for range、select 三种常见写法放到具体场景里解释,并梳理关闭规则与踩坑点,方便你在不同并发模型下做出合适选择。
