Go语言变量的声明和使用(非常详细,附带实例)
变量来源于数学。在高中数学里,变量被定义为“没有固定的值,可以改变的数”。但是,变量在计算机语言中被定义为“能够存储数据(计算结果或值)的内存”。
明确变量在计算机语言中的含义后,下面讲解变量在 Go 语言中的使用方法。
在 Go语言中,使用 var 关键字声明变量,其语法格式如下:
变量的类型,即变量的数据类型。在 Go语言中,数据类型分为四大类,分别是基础类型、复合类型、引用类型和接口类型。本节先介绍基础类型。
在 Go语言中有以下几种基础类型:
了解 Go语言的基础类型后,下面讲解声明变量时的两种特殊情况。
1) 当声明多个相同类型的变量时,须同时使用 var 关键字和英文格式下的逗号。代码如下:
2) 当声明多个不同类型的变量时,须同时使用var关键字和括号(类似情况全书均用英文格式下的括号)。代码如下:
例如,使用 Go语言声明一个表示天数的变量,并为这个变量设置初始值,用以表示 2022 年有 365 天。代码如下:
如果省略类型,那么变量的类型由表达式决定。例如,省略“var days int = 365”中的 int 类型后的代码如下:
如果省略表达式,那么变量的初始值会被设置为变量类型的默认值。例如,省略“var days int = 365”中的 365 后的代码如下:
通过上述示例可知“int类型的默认值是0”。下面是 Go 语言其他基础类型的默认值:
在 Go语言中可以使用“短变量声明”的语法格式声明并初始化函数内部的局部变量。“短变量声明”的语法格式如下:
“短变量声明”的语法格式只能使用在函数内部。例如,使用 func 关键字声明一个表示驾驶汽车的 drive() 函数;在 drive() 函数中,使用“短变量声明”的语法格式表示“当前车辆每百公里消耗汽油6.3L”。代码如下:
注意,在使用“短变量声明”语法格式时,不能提前声明其中的变量。否则,编译器会报错,报错的内容是“变量已经被声明”。错误代码如下:
掌握上述内容后,下面编写一个程序交换两个变量的值:
在 Go语言中,可以使用“多重赋值”的特性交换两个变量的值。下面使用“多重赋值”的特性修改上面的程序,关键代码如下:
注意,不可以使用匿名变量(即“_”)对其他变量执行赋值或运算的操作;任何被赋给匿名变量的值都会被抛弃。
下面编写一个程序,演示匿名变量的使用方法:
重点讲一下程序中的第 12 行代码“fmt.Println(_)”。当去除代码“fmt.Println(_)”前面的注释符号(即“//”)时,VS Code 会报错。提示的错误内容是“cannot use _ as value or type compiler(InvalidBlank)”,其含义是“不能把匿名变量作为变量的值或类型”。这恰恰印证了上文中讲到的,在使用匿名变量的过程中需要注意的事项。
明确变量在计算机语言中的含义后,下面讲解变量在 Go 语言中的使用方法。
Go语言变量的声明
声明指的是为程序的一个或多个实体命名。其中,实体指的是变量、常量、类型或函数。这里讲的是 Go语言中如何声明变量。在 Go语言中,使用 var 关键字声明变量,其语法格式如下:
var name type参数说明如下:
- name:变量名;
- type:变量的类型。
变量的类型,即变量的数据类型。在 Go语言中,数据类型分为四大类,分别是基础类型、复合类型、引用类型和接口类型。本节先介绍基础类型。
在 Go语言中有以下几种基础类型:
- 布尔(bool)类型;
- 字符串(string)类型;
- 整数类型:Go语言包含 4 个有符号的整数类型和 4 个无符号的整数类型,int 类型是当前广泛使用的整数类型;
- 字符类型:Go语言中有两种字符类型,即 byte 类型和 rune 类型。其中,byte 类型表示的是 ASCII 码的一个字符;rune类型表示的是 Unicode 码的一个字符。
- 浮点数类型:Go语言中有两种浮点数类型,即 float32 类型和 float64 类型。
- 复数类型:复数由两个浮点数表示,其中,一个表示实部,另一个表示虚部。在 Go语言中有两种复数类型,即 complex64 和 complex128。
了解 Go语言的基础类型后,下面讲解声明变量时的两种特殊情况。
1) 当声明多个相同类型的变量时,须同时使用 var 关键字和英文格式下的逗号。代码如下:
var a, b, c int
2) 当声明多个不同类型的变量时,须同时使用var关键字和括号(类似情况全书均用英文格式下的括号)。代码如下:
var ( age int name string getMarried bool )
Go语言变量的初始化
初始化是为变量设置初始值,其语法格式如下:var name type = expressionexpression 代指一个表达式。
例如,使用 Go语言声明一个表示天数的变量,并为这个变量设置初始值,用以表示 2022 年有 365 天。代码如下:
var days int = 365当为变量设置初始值时,类型和表达式可以省略一个。
如果省略类型,那么变量的类型由表达式决定。例如,省略“var days int = 365”中的 int 类型后的代码如下:
var days = 365因为 365 是整数,所以变量 days 的类型是整数。
如果省略表达式,那么变量的初始值会被设置为变量类型的默认值。例如,省略“var days int = 365”中的 365 后的代码如下:
var days intdays 变量的类型是 int,其初始值被设置为 int 类型的默认值,即 0。
通过上述示例可知“int类型的默认值是0”。下面是 Go 语言其他基础类型的默认值:
- 浮点数类型的默认值是 0.0;
- 字符串类型的默认值是空字符串(即"");
- 布尔类型的默认值是 false。
在 Go语言中可以使用“短变量声明”的语法格式声明并初始化函数内部的局部变量。“短变量声明”的语法格式如下:
name := expression参数说明如下:
- name:变量名;
- expression:表达式。
“短变量声明”的语法格式只能使用在函数内部。例如,使用 func 关键字声明一个表示驾驶汽车的 drive() 函数;在 drive() 函数中,使用“短变量声明”的语法格式表示“当前车辆每百公里消耗汽油6.3L”。代码如下:
func drive() { consumFuel := 6.3 }
注意,在使用“短变量声明”语法格式时,不能提前声明其中的变量。否则,编译器会报错,报错的内容是“变量已经被声明”。错误代码如下:
func drive() { var consumFuel float64 // 声明浮点数类型的、表示“消耗燃油”的变量 consumFuel := 6.3 // 再次声明浮点数类型的、表示“消耗燃油”的变量,并设置其初始值为 6.3 }
掌握上述内容后,下面编写一个程序交换两个变量的值:
package main // 声明 main 包 import "fmt" // 导入 fmt 包,用于打印字符串 func main() { var a int = 7 // 声明变量 a,并初始化为 7 var b int = 11 // 声明变量 b,并初始化为 11 var c int // 声明变量 c,作为中间变量 fmt.Println("a=", a, "b=", b) // 打印变量 a 和 b 的初始值 c = a // 把变量 a 赋值给变量 c a = b // 把变量 b 赋值给变量 a b = c // 把变量 c 赋值给变量 b fmt.Println("a=", a, "b=", b) // 打印执行交换操作后的变量 a 和 b 的值 }运行结果如下:
a = 7 b = 11
a = 11 b = 7
在 Go语言中,可以使用“多重赋值”的特性交换两个变量的值。下面使用“多重赋值”的特性修改上面的程序,关键代码如下:
func main() { var a int = 7 // 声明变量 a,并初始化为 7 var b int = 11 // 声明变量 b,并初始化为 11 fmt.Println("a=", a, "b=", b) // 打印变量 a 和 b 的初始值 b, a = a, b // 把变量 a 赋值给变量 b,把变量 b 赋值给变量 a fmt.Println("a=", a, "b=", b) // 打印执行交换操作后的变量 a 和 b 的值 }当使用“多重赋值”时,要特别注意上述代码第 5 行中各个变量的赋值顺序。
Go语言匿名变量
在 Go语言中,把没有名称的变量称作匿名变量,并且使用空白标识符(即“_”)表示匿名变量。注意,不可以使用匿名变量(即“_”)对其他变量执行赋值或运算的操作;任何被赋给匿名变量的值都会被抛弃。
下面编写一个程序,演示匿名变量的使用方法:
package main // 声明 main 包 import "fmt" // 导入 fmt 包,用于打印字符串 func getYearDatas() (int, int) { // 声明 getYearDatas() 函数 return 12, 24 // 返回一年中的月份数量(即 12)和节气数量(即 24) } func main() { // 声明 main() 函数 monthNums, _ := getYearDatas() // 获取一年中的月份数量 _, solarTermsNums := getYearDatas() // 获取一年中的节气数量 // fmt.Println() // 打印一年中的月份数量和节气数量 fmt.Println("一年有", monthNums, "个月份和", solarTermsNums, "个节气") }运行结果如下:
一年有 12 个月份和 24 个节气
程序中,首先使用 func 关键字声明用于返回一年中的月份和节气数量的 getYearDatas() 函数,然后在 main() 函数中使用匿名变量和“短变量声明”的语法格式分别获取一年中的月份和节气。重点讲一下程序中的第 12 行代码“fmt.Println(_)”。当去除代码“fmt.Println(_)”前面的注释符号(即“//”)时,VS Code 会报错。提示的错误内容是“cannot use _ as value or type compiler(InvalidBlank)”,其含义是“不能把匿名变量作为变量的值或类型”。这恰恰印证了上文中讲到的,在使用匿名变量的过程中需要注意的事项。