主要内容:遍历数组、切片——获得索引和值,遍历字符串——获得字符,遍历 map——获得 map 的键和值,遍历通道(channel)——接收通道数据,在遍历中选择希望获得的变量for range 结构是Go语言特有的一种的迭代结构,在许多情况下都非常有用,for range 可以遍历数组、切片、字符串、map 及通道(channel),for range 语法上类似于其它语言中的 foreach 语句,一般形式为: for key, val := range coll { ... } 需
主要内容:for 中的初始语句——开始循环时执行的语句,for 中的条件表达式——控制是否循环的开关,for 中的结束语句——每次循环结束时执行的语句与多数语言不同的是,Go语言中的循环语句只支持 for 关键字,而不支持 while 和 do-while 结构,关键字 for 的基本使用方法与C语言和 C++ 中非常接近: 可以看到比较大的一个不同在于 for 后面的条件表达式不需要用圆括号 括起来,Go语言还进一步考虑到无限循环的场景,让开发者不用写无聊的 和 ,而直接简化为如下的写法:
主要内容:举例,特殊写法在Go语言中,关键字 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号 括起来的代码块,否则就忽略该代码块继续执行后续的代码。 如果存在第二个分支,则可以在上面代码的基础上添加 else 关键字以及另一代码块,这个代码块中的代码只有在条件不满足时才会执行,if 和 else 后的两个代码块是相互独立的分支,只能执行其中一个。 如果存在第三个分支,则可以使
Go语言中同样允许使用多维切片,声明一个多维数组的语法格式如下: var sliceName [][]...[]sliceType 其中,sliceName 为切片的名字,sliceType为切片的类型,每个 代表着一个维度,切片有几个维度就需要几个 。 下面以二维切片为例,声明一个二维切片并赋值,代码如下所示。 上面的代码也可以简写为下面的样子。 上面的代码中展示了一个包含两个元素的外层切片,同
通过前面的学习我们了解到切片其实就是多个相同类型元素的连续集合,既然切片是一个集合,那么我们就可以迭代其中的元素,Go语言有个特殊的关键字 range,它可以配合关键字 for 来迭代切片里的每一个元素,如下所示: 第 4 行中的 index 和 value 分别用来接收 range 关键字返回的切片中每个元素的索引和值,这里的 index 和 value 不是固定的,读者也可以定义成其它的名字。
Go语言的内置函数 copy() 可以将一个数组切片复制到另一个数组切片中,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。 copy() 函数的使用格式如下: copy( destSlice, srcSlice []T) int 其中 srcSlice 为数据来源切片,destSlice 为复制的目标(也就是将 srcSlice 复制到 destSlice),目
Go语言中允许使用多维数组,因为数组属于值类型,所以多维数组的所有维度都会在创建时自动初始化零值,多维数组尤其适合管理具有父子关系或者与坐标系相关联的数据。 声明多维数组的语法如下所示: var array_name [size1][size2]...[sizen] array_type 其中,array_name 为数组的名字,array_type 为数组的类型,size1、size2 等等为数
主要内容:区分类型别名与类型定义,非本地类型不能定义方法,在结构体成员嵌入时使用别名注意:本节内容涉及Go语言新版本的功能,内容上会涉及后续章节讲解的类型定义及结构体嵌入等特性。另外,本节内容适用于对Go语言很熟悉且正在关注工程升级、代码重构等问题的读者阅读。 类型别名是 Go 1.9 版本添加的新功能,主要用于解决代码升级、迁移中存在的类型兼容性问题。在 C/ C++ 语言中,代码重构升级可以使用宏快速定义一段新的代码,Go语言中没有选择加入宏,而是解决了重构中最麻烦的类型名变
在编码过程中,可能会遇到没有名称的变量、类型或方法。虽然这不是必须的,但有时候这样做可以极大地增强代码的灵活性,这些变量被统称为匿名变量。 匿名变量的特点是一个下画线“_”,“_”本身就是一个特殊的标识符,被称为空白标识符。它可以像其他标识符那样用于变量的声明或赋值(任何类型都可以赋值给它),但任何赋给这个标识符的值都将被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其它
主要内容:Go语言工程结构简单,Go语言编译速度快Go语言语法简单易懂,学习曲线平缓,不需要像 C/ C++ 语言动辄需要两到三年的学习期。Go语言被称为“互联网时代的C语言”。互联网的短、频、快特性在Go语言中体现得淋漓尽致。一个熟练的开发者只需要短短的一周时间就可以从学习阶段转到开发阶段,并完成一个高并发的服务器开发。 Go语言是 Google 公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。所以它是一门类型安全的语言,加上通过构
正式学习 Python 之前,我们有必要先搞清楚【 编程语言】这个概念。 在我们很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习,我们在不知不觉中学会了说话,也能听懂其他小朋友说话的意思,于是我们开始用语言与他人交流。 世界上存在许多种语言,包括汉语、英语、日语、俄语等等,每种语言都有固定的格式,比如汉语(中国话),每个汉字代表着不同的意思,我们必须正确
主要内容:fopen() 函数的返回值,fopen() 函数的打开方式,关闭文件,实例演示在C语言中,操作文件之前必须先打开文件;所谓“打开文件”,就是让程序和文件建立连接的过程。 打开文件之后,程序可以得到文件的相关信息,例如大小、类型、权限、创建者、更新时间等。在后续读写文件的过程中,程序还可以记录当前读写到了哪个位置,下次可以在此基础上继续操作。 标准输入文件 stdin(表示键盘)、标准输出文件 stdout(表示显示器)、标准错误文件 stderr(表示显示器)是由系统打开的
在实际编程中,有些数据的取值往往是有限的,只能是非常少量的整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。 以每周七天为例,我们可以使用 命令来给每天指定一个名字: 运行结果: 5↙ Friday 命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言提供了一种 枚举(Enum)类型
主要内容:#if 的用法,#ifdef 的用法,#ifndef 的用法,三者之间的区别假如现在要开发一个C语言程序,让它输出红色的文字,并且要求跨平台,在 Windows 和 Linux 下都能运行,怎么办呢? 这个程序的难点在于,不同平台下控制文字颜色的代码不一样,我们必须要能够识别出不同的平台。 Windows 有专有的宏 ,Linux 有专有的宏 ,以现有的知识,我们很容易就想到了 if else,请看下面的代码: 但这段代码是错误的,在 Windows 下提示 __linu
主要内容:在 for 循环条件里面定义变量,单独的代码块,再谈作用域所谓 代码块,就是由 包围起来的代码。代码块在C语言中随处可见,例如函数体、选择结构、循环结构等。不包含代码块的C语言程序根本不能运行,即使最简单的C语言程序(上节已经进行了展示)也要包含代码块。 C语言允许在代码块内部定义变量,这样的变量具有块级作用域;换句话说,在代码块内部定义的变量只能在代码块内部使用,出了代码块就无效了。 上节我们已经讲解了函数,在函数内部定义的变量叫做局部变量,这节我们接