5.1.1.类型转换 Go语言提供了一种转换不同但类型兼容的类型的方式,这种转换是非常有用且安全的。对于非数值类型之间的转换不会丢失精度,但是对于数值类型之间的转换,可能会丢失精度或发生其他的问题。例如,如果我们声明x :=uint16(65000),然后使用y := int16(x)进行转换。因为…
Go语言开发-过程式编程-语句基础
5.1.语句基础 通常,Go语言的语法要求使用分号作为语句结束符。然而,正如我们所看到的那样,在实际编程中我们很少真正需要分号,这是因为编译器会自动在以标识符、数字常量、字符常量、字符串常量、某些关键字(break、continue、fallthrough、return)、递增或递减操作符(++或&…
Go语言开发-过程式编程
5过程式编程 本章的主旨是讲解Go语言的过程式编程知识,Go语言可以用于编写纯过程式程序、面向对象的程序,也可以是这两者的组合。学习Go语言的过程式编程是极其重要的,因为Go语言的面向对象编程是建立在过程式编程的基础上的,并发编程也是如此。 前面的几个章节通过示例介绍了Go语言内置的数据类型,并了解…
Go语言开发-集合类型-例子:词频统计
4.4.2.例子:词频统计 文本分析具有多种用途,从数据挖掘到语言学习本身。在本小节中,我们将讲解一个文本分析最基本形式的例子:从给定的文件中统计单词出现的频度。 频度数据可以以两种不同却同样合理的方式显示,一种是将单词以字母顺序排列,另一种是按照频度排列。wordfrequency程序(在文件wo…
Go语言开发-集合类型-例子:猜测分隔符
4.4.1.例子:猜测分隔符 有些情况下,我们可能会处理一大堆数据文件,每个文件中每个记录占用一行,但是不同的文件可能会使用不同的分隔符(例如,制表符、空格或“*”)。要批量处理这些文件,我们需要确定每个文件使用的分隔符。本节中的guess_separator例子(在文件guess_separato…
Go语言开发-集合类型-例子
4.4.例子 在本节中,我们将会介绍两个小例子,第一个例子介绍一维和二维切片,第二个例子介绍映射,包括值不唯一的映射反转,同时也会介绍切片和排序。 目录 作者:Johnson 原文:Go语言开发-集合类型-例子 出处:青梅酒博客 – Plum Wine Blog 原创文章,版权所有,转载…
Go net/http 超时机制完全手册
当用Go写HTTP的服务器和客户端的时候,超时处理总是最易犯错和最微妙的地方之一。错误可能来自很多地方,一个错误可能等待很长时间没有结果,直到网络故障或者进程挂起。 HTTP是一个复杂的、多阶段(multi-stage)协议,所以没有一个放之四海而皆准的超时解决方案,比如一个流服务、一个JSON A…
Go语言开发-集合类型-映射反转
4.3.5.映射反转 如果一个映射的值是唯一的且值的类型和键一样都是被支持类型的话,我们就可以很容易的将该映射进行反转操作。
1 2 3 4 5 6 7 | cityForPopulation := make(map[int]string, len(populationForCity)) for city, population := range populationForCity { cityForPopulation[population] = city } fmt.Println(cityForPopulation) map[12610000:Istanbul 11290000:Beijing 12690000:Mumbai 11620000:Karachi] |
因为populationForCity是map[string]int类型的,所以我们开始创建了一个反转的映射…
Go语言开发-集合类型-键序映射的遍历
4.3.4.键序映射的遍历 在实际使用中,我们经常需要以特定的顺序生成并展示这些数据。下面是一个例子,展示了如何以字母顺序(严格地说,是Unicode码点)输出映射populationForCity中的城市。
1 2 3 4 5 6 7 8 9 10 11 12 13 | cities := make([]string, 0, len(populationForCity)) for city := range populationForCity { cities = append(cities, city) } sort.Strings(cities) for _, city := range cities { fmt.Printf("%-10s %8d\n", city, populationForCity[city]) } Beijing 11290000 Istanbul 12610000 Karachi 11620000 Mumbai 12690000 |
我们首先创建了一个[]s…
Go语言开发-集合类型-修改映射
4.3.3.修改映射 元素,也就是“键-值”对,可以被插入到映射中,也可以从映射中删除掉,且任何键对应的值都可以被修改。请看下面的例子。
1 2 3 4 5 6 7 8 9 10 11 12 | fmt.Println(len(populationForCity), populationForCity) delete(populationForCity, "Shanghai") // Delete fmt.Println(len(populationForCity), populationForCity) populationForCity["Karachi"] = 11620000 // Update fmt.Println(len(populationForCity), populationForCity) populationForCity["Beijing"] = 11290000 // Insert fmt.Println(len(populationForCity), populationForCity) 4 map[Shanghai:13680000 Mumbai:12690000 Istanbul:12610000 Karachi:10620000] 3 map[Mumbai:12690000 Istanbul:12610000 Karachi:10620000] 3 map[Mumbai:12690000 Istanbul:12610000 Karachi:11620000] 4 map[Mumbai:12690000 Istanbul:12610000 Karachi:11620000 Beijing:11290000] |
映射的插入和更新语法是一样:如果给定的键不存在,则将给定的键和值插入到该映射中;而如果存在,则将…
Go语言开发-集合类型-映射查找
4.3.2.映射查找 对于映射的查找操作,Go语言提供了两种相似的语法,都是使用的[]索引操作符。下面是使用这两种语法的几个例子。
1 2 3 4 5 6 7 | population := populationForCity["Mumbai"] fmt.Println("Mumbai's population is", population) population = populationForCity["Emerald City"] fmt.Println("Emerald City's population is", population) Mumbai's population is 12690000 Emerald City's population is 0 |
如果我们查找的键存在,则返回对应的值,如果该键不存在,就返回映射的值的类型的零值。但是,在上面的例子中…
Go语言开发-集合类型-创建和填充映射
4.3.1.创建和填充映射 下面的例子演示了如何创建并填充一个键为string类型值为float64类型的映射。
1 2 3 4 5 6 7 8 | massForPlanet := make(map[string]float64) // Same as: map[string]float64{} massForPlanet["Mercury"] = 0.06 massForPlanet["Venus"] = 0.82 massForPlanet["Earth"] = 1.00 massForPlanet["Mars"] = 0.11 fmt.Println(massForPlanet) map[Venus:0.82 Mars:0.11 Earth:1 Mercury:0.06] |
对于元素个数较少的映射,是否指定其初始容量无关紧要,但是对于元素数量比较多的映射,指定合适的容量可以提高性能。如果我们知…
Go语言开发-集合类型-映射
4.3.映射 Go 语言的映射是一个保存键值对的无序的集合,其容量仅受机器内存限制。映射的键是唯一的且其类型必须支持==和!=操作符,所以大部分内置类型都可以作为键来使用(例如,int、float64、rune、string、可比较的数组、结构体和自定义类型,以及指针)。切片、不可比较的数组和结构体…
Go语言开发-集合类型-排序和查找切片
4.2.4.排序和查找切片 标准库中的sort包提供了对int类型、float64类型和string类型的切片进行排序的函数,检查切片是否已排序的函数和使用二分查找法在已排序的切片中查找特定元素的函数。同时标准库也提供了通用的用于自定义数据的sort.Sort() 和sort.Search()函数。…
Go语言开发-集合类型-修改切片
4.2.3.修改切片 我们可以使用内置的append()函数来为切片追加元素。该函数接受一个被追加的切片和一个或多个要追加的元素作为参数。如果我们需要将一个切片追加到另一个切片,我们就必须要使用…(省略号)操作符来告诉Go语言将要追加的切片作为多个单独的元素。要追加的元素必须要和切片中元…