Go 语言变量声明_定义_赋值(图文讲解)
一则或许对你有用的小广告
最近,小哈正在带小伙伴们做前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.2 + Vite 4
,手把手,前端 + 后端,全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已进入第七章 《文章分类模块开发》中,截止到目前,已更新 105150 字,69 篇内容,讲解图:521 张,还在持续爆肝中,后续还会上新更多项目,已有 200+ 小伙伴加入,欢迎点击围观。
编程中可以说最常见的就是变量了,主要被用来存储各种类型数据。
关于变量的类型,主要有:
- 整型
- 浮点型
- 布尔型
- 结构体
- ...
Go 语言中不同类型的变量,需要先声明,才能够被使用。
Go 语言 - 声明变量
1. 标准格式
Go 语言中声明变量需以 var
关键字开头,变量名放在中间,变量类型放在最后。
var 变量名 变量类型
注意: 行尾无分号
;
。
下面是 Go 语言常见的基本变量声明:
var a int // 声明一个整型的变量,被用来保存整数数值
var b string // 声明一个字符串类型的变量
var c []float32 // 声明一个 32 位浮点切片类型的变量
var d func() bool // 声明一个返回值为布尔型的函数变量,将函数以变量的形式保存起来
var e struct { // 声明一个结构体类型的变量,结构体中声明了一个整型的 `f` 变量
f int
}
2. 批量格式
若觉得每次前面都要定义 var
非常繁琐, 还可以通过 var
和括号来批量声明:
var (
a int
b string
c []float32
d func() bool
e struct {
f int
}
)
Go 语言 - 初始化与定义变量
Go 语言中,初始化变量有如下几种写法:
1. 标准格式
var 变量名 变量类型 = 变量值
例如想初始化一个人的年龄,可以这样写:
var age int = 18 // 初始化一个整型,变量名为 age, 初始值为 18 的变量
2. 编译器推导类型格式
我们还可以在上述格式的基础上,再精简点:
var age = 18
无需定义变量类型,编译器会根据等号右边的变量值,来推断 age
的变量类型。
3. 短变量声明与初始化
还可以在第二种的基础上,再做简化:
age := 18
这也是 Go 语言中变量推导的一种写法,但是与上面不同的是:
注意: 因为使用了
:=
, 而不是赋值的=
, 这就限制了等号左边的变量名必须是没有定义过的变量名,否则将会发生编译错误。
举个反例,代码如下:
// 声明一个整型 age 变量
var age int
// 再次声明与赋值
age := 18
编译报错如下:
no new variables on left side of :=
图示:
go编译报错
PS: 报错信息意思表示:
:=
左边的变量已经被声明了。
Go语言 - 多变量同时赋值
假设这样一个场景,需要交互互相两个变量的值,先看看传统的写法:
var a int = 100 // 定义变量 a
var b int = 200 // 定义变量 b
var c int // 定义一个中间变量
// 开始互相交互 a 与 b 变量的值
c = a
a = b
b = c
fmt.Println(a, b)
为了达到交换后数据的正确性,通常都需要定义一个临时中间变量来做中转,如上所示。
代码输出结果:
200 100
但是,在 Go 语言中利用多重赋值的特性,还可以这样写:
var a int = 100
var b int = 200
a, b = b, a
fmt.Println(a, b)
代码运行结果同样是:
200 100
Go 语言 - 匿名变量
匿名变量就是一个没有名字的变量,通常用下划线 _
来表示。
这玩意什么场景下会用到呢?
举个例子,假设有这种场景,需要调用某个函数 findStudent()
,来查询数据库中某个学生的数据,函数会返回两个数值,分别是:
- 学生姓名;
- 学生年龄;
但是呢,我们只需要获取学生的姓名就行了,年龄并不需要,但是又不想为其单独声明一个变量,这时匿名变量就有用武之地了:
func findStudent() (string, int) {
return "犬小哈", 100
}
name, _ := findStudent()
fmt.Println(name)
代码输出:
犬小哈
注意: 匿名变量不占用命名空间,也不会占用内存。匿名变量与匿名变量直接不会因为多次声明而无法使用。