• 使用 Delve 调试 Go 服务的一次经历

    > Vladimir Varankin 写于 2018/12/02 某天,我们生产服务上的几个实例突然不能处理外部进入的流量,HTTP 请求成功通过负载均衡到达实例,但是之后却 hang 住了。接下来记录的是一次调试在线 Go 服务的惊心动魄的经历。 正是下面逐步演示的操作,帮助我们定位了问题的根本原因。 简单起见,我们将起一个 Go 写的 HTTP 服务作为调试使用,这个服务实现的细节暂时不做深究(之后我们将深入分析代码)。一个真实的生产应用可能包含很多组件,这些组件实现了业...

  • 解析 Go context 通过 HTTP 的传播

    Go 1.7 引入了一个内置的上下文(context)类型。在系统中,可以使用 `context` 传递请求范围的元数据,例如不同函数,线程甚至进程之间的请求 ID。Go 将 `context` 引入标准库的初衷是以统一同一进程内的 context 传播。因此整个库和框架可以使用标准 context,同时可以避免代码碎片化。在引入该包之前,每个框架都在使用它们自己的 context 类型,并且没有两个 context 彼此兼容。在这种情况下传播当前 context 就要编写丑陋的胶水代码。 ...