深入Go语言 - 13

本章重点介绍Go语言中的反射。
reflect可以实现运行时的反射,允许程序操纵对象的值和类型。
典型地,你可以获取 interface{}的动态类型以及的它的值和方法。

Go是静态类型的语言,每一个对象在声明和初始化的时候都已经有一个确定值,即使是声明为接口类型的变量,它的静态类型也已经确定,即使任何包含这个接口方法集的类型的对象都可以赋值给它。

我们可以在运行时获取对象的动态类型和值。

类型Type和值Value是我们使用发射库的主要用的两个概念。

阅读全文

[译]Go net/http 超时机制完全手册

英文原始出处: The complete guide to Go net/http timeouts, 作者: Filippo Valsorda

当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方,一个错误可能等待很长时间没有结果,直到网络故障或者进程挂起。

HTTP是一个复杂的、多阶段(multi-stage)协议,所以没有一个放之四海而皆准的超时解决方案,比如一个流服务、一个JSON API和一个Comet服务对超时的需求都不相同, 往往默认值不是你想要的。

本文我将拆解需要超时设置的各个阶段,看看用什么不同的方式去处理它, 包括服务器端和客户端。

阅读全文