Fork me on GitHub

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

当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方,一个错误可能等待很长时间没有结果,直到网络故障或者进程挂起。 HTTP是一个复杂的、多阶段(multi-stage)协议,所以没有一个放之四海而皆准的超时解决方案,比如一个流服务、一个JSON A…

Go语言开发-集合类型-映射反转

4.3.5.映射反转 如果一个映射的值是唯一的且值的类型和键一样都是被支持类型的话,我们就可以很容易的将该映射进行反转操作。

因为populationForCity是map[string]int类型的,所以我们开始创建了一个反转的映射…

Go语言开发-集合类型-键序映射的遍历

4.3.4.键序映射的遍历 在实际使用中,我们经常需要以特定的顺序生成并展示这些数据。下面是一个例子,展示了如何以字母顺序(严格地说,是Unicode码点)输出映射populationForCity中的城市。

我们首先创建了一个[]s…

Go语言开发-集合类型-修改映射

4.3.3.修改映射 元素,也就是“键-值”对,可以被插入到映射中,也可以从映射中删除掉,且任何键对应的值都可以被修改。请看下面的例子。

映射的插入和更新语法是一样:如果给定的键不存在,则将给定的键和值插入到该映射中;而如果存在,则将…

Go语言开发-集合类型-映射查找

4.3.2.映射查找 对于映射的查找操作,Go语言提供了两种相似的语法,都是使用的[]索引操作符。下面是使用这两种语法的几个例子。

如果我们查找的键存在,则返回对应的值,如果该键不存在,就返回映射的值的类型的零值。但是,在上面的例子中…

Go语言开发-集合类型-创建和填充映射

4.3.1.创建和填充映射 下面的例子演示了如何创建并填充一个键为string类型值为float64类型的映射。

对于元素个数较少的映射,是否指定其初始容量无关紧要,但是对于元素数量比较多的映射,指定合适的容量可以提高性能。如果我们知…

Go语言开发-集合类型-映射

4.3.映射 Go 语言的映射是一个保存键值对的无序的集合,其容量仅受机器内存限制。映射的键是唯一的且其类型必须支持==和!=操作符,所以大部分内置类型都可以作为键来使用(例如,int、float64、rune、string、可比较的数组、结构体和自定义类型,以及指针)。切片、不可比较的数组和结构体…

Go语言开发-集合类型-修改切片

4.2.3.修改切片 我们可以使用内置的append()函数来为切片追加元素。该函数接受一个被追加的切片和一个或多个要追加的元素作为参数。如果我们需要将一个切片追加到另一个切片,我们就必须要使用…(省略号)操作符来告诉Go语言将要追加的切片作为多个单独的元素。要追加的元素必须要和切片中元…

Go语言开发-集合类型-索引和切分切片

4.2.1.索引和切分切片 一个切片是一个隐藏数组的引用,且切片的切片也是对同一个隐藏数组的引用。下面的例子可以解释这一点。

当我们修改数据时,不管是通过原始切片s还是通过切片s的切片t,它们的底层数据都会被修改,所以这两个切片都会受…

Go语言开发-集合类型-值、指针和引用类型

4.1.值、指针和引用类型 本节我们将讨论变量保存的是什么(值、指针和引用,包括指向数组、切片和映射的引用),并在接下来的小结中介绍如何使用数组、切片和映射。 通常情况下,Go语言的变量保存的是相应的值,也就是说,我们可以认为变量可以作为其所保存的值,但不包括通道、函数、方法、映射和切片引用,因为它…