首页 > 编程笔记 > Go语言笔记 阅读:14

Go语言变量的声明和使用(非常详细,附带实例)

变量来源于数学。在高中数学里,变量被定义为“没有固定的值,可以改变的数”。但是,变量在计算机语言中被定义为“能够存储数据(计算结果或值)的内存”。

明确变量在计算机语言中的含义后,下面讲解变量在 Go 语言中的使用方法。

Go语言变量的声明

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

在 Go语言中,使用 var 关键字声明变量,其语法格式如下:
var name type
参数说明如下:
变量的类型,即变量的数据类型。在 Go语言中,数据类型分为四大类,分别是基础类型、复合类型、引用类型和接口类型。本节先介绍基础类型。

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

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

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

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

Go语言变量的初始化

初始化是为变量设置初始值,其语法格式如下:
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 语言其他基础类型的默认值:
在 Go语言中可以使用“短变量声明”的语法格式声明并初始化函数内部的局部变量。“短变量声明”的语法格式如下:
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)”,其含义是“不能把匿名变量作为变量的值或类型”。这恰恰印证了上文中讲到的,在使用匿名变量的过程中需要注意的事项。

相关文章