购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.1 Go语言变量

变量来源于数学。在高中数学里,变量被定义为“没有固定的值,可以改变的数”。但是,变量在计算机语言中被定义为“能够存储数据(计算结果或值)的内存”。明确变量在计算机语言中的含义后,下面讲解变量在Go语言中的使用方法。

3.1.1 变量的声明

声明指的是为程序的一个或多个实体命名。其中,实体指的是变量、常量、类型或函数。本节讲解在Go语言中如何声明变量。

说明

有关如何声明常量、类型和函数,将在本书后面的章节中讲解。

在Go语言中,使用var关键字声明变量,其语法格式如下。

    var name type

参数说明如下。

name:变量名。

type:变量的类型。

变量的类型,即变量的数据类型。在Go语言中,数据类型分为四大类,分别是基础类型、复合类型、引用类型和接口类型。本节先介绍基础类型。

在Go语言中有以下几种基础类型。

布尔(bool)类型。

字符串(string)类型。

整数类型。

在Go语言中,整数类型包含4个有符号的整数类型和4个无符号的整数类型。其中,二进制数的位数与整数类型的对应关系如表3.1所示。

表3.1 二进制数的位数与整数类型的对应关系

说明

int类型是当前广泛使用的整数类型。

字符类型。Go语言中有两种字符类型,即byte类型和rune类型。其中,byte类型同义于uint8类型,表示的是ASCII码的一个字符;rune类型同义于int32类型,表示的是Unicode码的一个字符。

浮点数类型。Go语言中有两种浮点数类型,即float32类型和float64类型。

复数类型。复数由两个浮点数表示,其中,一个表示实部,另一个表示虚部。在Go语言中有两种复数类型,即complex64和complex128。

了解Go语言的基础类型后,下面讲解声明变量时的两种特殊情况。

当声明多个相同类型的变量时,须同时使用var关键字和英文格式下的逗号。代码如下。

    var a, b, c int

当声明多个不同类型的变量时,须同时使用var关键字和括号(类似情况全书均用英文格式下的括号)。代码如下。

3.1.2 变量的初始化

初始化是为变量设置初始值,其语法格式如下。

    var name type = expression

参数说明如下。

expression:表达式。

例如,使用Go语言声明一个表示天数的变量,并为这个变量设置初始值,用以表示2022年有365天。代码如下。

    var days int = 365

当为变量设置初始值时,类型和表达式可以省略一个。

如果省略类型,那么变量的类型由表达式决定。

例如,省略“var days int = 365”中的int类型后的代码如下。

    var days = 365

因为365是整数,所以变量days的类型是整数。

如果省略表达式,那么变量的初始值会被设置为变量类型的默认值。

例如,省略“var days int = 365”中的365后的代码如下。

    var days int

days变量的类型是int,其初始值被设置为int类型的默认值,即0。

通过上述示例可知“int类型的默认值是0”。下面是Go语言其他基础类型的默认值。

浮点数类型的默认值是0.0。

字符串类型的默认值是空字符串(即"")。

布尔类型的默认值是false。

在Go语言中可以使用“短变量声明”的语法格式声明并初始化函数内部的局部变量。“短变量声明”的语法格式如下。

    name := expression

参数说明如下。

name:变量名。

expression:表达式。

注意

“短变量声明”的语法格式只能使用在函数内部。

例如,使用func关键字声明一个表示驾驶汽车的drive()函数;在drive()函数中,使用“短变量声明”的语法格式表示“当前车辆每百公里消耗汽油6.3L”。代码如下。

注意,在使用“短变量声明”语法格式时,不能提前声明其中的变量。否则,编译器会报错,报错的内容是“变量已经被声明”。错误代码如下。

掌握上述内容后,下面编写一个程序交换两个变量的值。

【例3.1】 交换两个变量的值 (实例位置:资源包 \TM\sl\3\1

首先分别声明3个int类型的变量a、b和c,然后分别初始化变量a和变量b的值为7和11,接着把变量c作为中间变量,最后借助变量c交换变量a和变量b的值。代码如下。

运行结果如下。

    a = 7 b = 11
    a = 11 b = 7

在Go语言中,可以使用“多重赋值”的特性交换两个变量的值。下面使用“多重赋值”的特性修改例3.1。关键代码如下。

①打印即输出,编程人员习惯叫法。

注意

当使用“多重赋值”时,要特别注意上述代码第5行中各个变量的赋值顺序。

3.1.3 匿名变量

在Go语言中,把没有名称的变量称作匿名变量,并且使用空白标识符(即“_”)表示匿名变量。注意,不可以使用匿名变量(即“_”)对其他变量执行赋值或运算的操作;任何被赋给匿名变量的值都会被抛弃。

下面编写一个程序,演示匿名变量的使用方法。

【例3.2】 分别打印一年有多少个月份和节气 (实例位置:资源包 \TM\sl\3\2

首先使用func关键字声明用于返回一年中的月份和节气数量的getYearDatas()函数,然后在main()函数中使用匿名变量和“短变量声明”的语法格式分别获取一年中的月份和节气。代码如下。

运行结果如下。

    一年有 12 个月份和 24 个节气

下面说明例3.2中的第12行代码“fmt.Println(_)”。当去除代码“fmt.Println(_)”前面的注释符号(即“//”)时,VS Code会报错。提示的错误内容是“cannot use _ as value or type compiler(InvalidBlank)”,其含义是“不能把匿名变量作为变量的值或类型”。这恰恰印证了上文中讲到的,在使用匿名变量的过程中需要注意的事项。

3.1.4 变量的作用域

变量的作用域是变量在程序中的作用范围。在Go语言中,把声明在函数内的变量称作局部变量;把声明在函数外的变量称作全局变量;把在声明函数时声明的变量称作形式参数(简称为“形参”)。下面分别讲解局部变量、全局变量和形参。

1.局部变量

局部变量的作用域只在函数内。当开始调用局部变量所在的函数时,将声明并初始化这个局部变量;当结束调用局部变量所在的函数时,将销毁这个局部变量。例3.1中的变量a、b和c就是局部变量。

2.全局变量

全局变量的作用域是除声明包和导入包外的整个源文件(即.go文件)。在声明全局变量时,使用var关键字。

【例3.3】 计算上班的通勤时间 (实例位置:资源包 \TM\sl\3\3

首先使用var关键字声明用于表示“上班通勤时间”的全局变量totalTime,然后分别在main()函数中声明并初始化用于表示“上班步行时间”的变量walkTime和表示“上班乘坐地铁的时间”的变量subwayTime,最后计算并打印上班通勤时间。代码如下。

运行结果如下。

    上班通勤时间一共需要 37 分钟
3.形参

形参是声明函数时在函数名后的括号中声明的变量。当开始调用形参所在的函数时,将声明并初始化形参;当结束调用形参所在的函数时,将销毁形参。

【例3.4】 使用形参修改例3.3 (实例位置:资源包 \TM\sl\3\4

首先使用var关键字声明用于表示“上班通勤时间”的全局变量totalTime。然后使用func关键字声明用于返回上班通勤时间的getTotalTime()函数;在这个函数中,包含两个int类型的形参,它们分别是表示“上班步行时间”的time_w和表示“上班乘坐地铁的时间”的time_s。接着分别在main()函数中声明并初始化用于表示“上班步行时间”的变量walkTime和“上班乘坐地铁的时间”的变量subwayTime。最后调用getTotalTime()函数计算并打印上班通勤时间。代码如下。 zUeKzQFJ2STYf+lWOF5qlR4VggWYQ/bcj7Bmv3DQud930cLpHLSEwdFrxD0RQfkx

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开