5.2.2. switch语句 Go语言提供了两种类型的switch语句:表达式开关和类型开关。表达式开关与C、C++和Java语言中的类似,而类型开关是Go语言所特有的。这两种开关在语法上非常相似,但与C、C++和Java不同的是,Go语言的switch语句不会自动向下贯通(所以无需在每个case…
Go语言开发-过程式编程-IF语句
5.2.1. if语句 Go语言的if语句语法如下:
1 2 3 4 5 6 7 | if optionalStatement1; booleanExpression1 { block1 } else if optionalStatement2; booleanExpression2 { block2 } else { block3 } |
在一个if语句块中可能含有零个或多个elseif子句,以及零个或一个else子句,而每个子句中又由多个语句组成。 If中的大括号是必需的,但是分号只有在使用可选声明的情况下才需要。…
Go语言开发-过程式编程-分支
5.2.分支 Go语言支持3种分支:if、switch和select。我们也可以通过使用映射来实现分支功能,其中该映射的键用于选择分支,而值是对应的要调用的函数,稍后我们会详细介绍。 目录 作者:Johnson 原文:Go语言开发-过程式编程-分支 出处:青梅酒博客 – Plum Win…
Go语言开发-过程式编程-类型断言
5.1.2.类型断言 一个类型的方法集是指可以被该类型的值调用的所有方法的集合,对于没有方法的类型来数该集合为空。Go语言的interface{}类型用于表示空接口,即一个含有空集的方法集的类型的值。因为每个类型都有一个包含空集的方法集(不论其拥有多少方法),一个interface{}可以用于表示一…
go-checkiptools使用说明
项目地址 https://github.com/johnsonz/go-checkiptools 说明 使用Go语言编写,在性能上会比Python版的有一些提升,功能参考了checkgoogleip、checkiptools、gogotester感谢大家! 自带实用小工具,扫描完成后会自动将ip写入…
go-sni-detector使用说明
项目地址 https://github.com/johnsonz/go-sni-detector 说明 用于扫描SNI服务器,sniip_output.txt中的延迟值为配置中指定的各server_name的延迟的平均值。 请将待测试的ip段放到sniip.txt文件,支持以下ip格式: 127.0…
Go语言开发-过程式编程-类型转换
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…