本文已参与「新人创作礼」活动,一起开启掘金创作之路
1. 变量的声明方式
1.1)var 声明
它的声明形式如下:
var name type = expression
- 其中,类型(
type)和表达式(expression)可以省略其中一个,但是不能都省略
例如:
var a int = 1
// 省略 type
var b = "abc"
var c int
fmt.Println(a, b, c)
在省略 expression 时,变量会被赋为零值
- 零值
在 Go 语言中,各个数据类型对应零值如下:
bool 值的为 false;
int 整数型为 0;
float 浮点型为 0.0;
string 为 "" 空串;
接口和引用类型(slice、指针、map、通道、函数)为 nil;
复合类型(数组、结构体)为 所有元素的零值;
- 对于多个变量的声明可以放到一个
()内
var (
a int = 1
b = "abc"
c int
)
- 对于多个变量也可以放到一行,省略
type
var a, b, c = 1, "abc", 0
1.2):= 短变量声明
Go 语言还提供了一种短变量声明方式,它的格式如下:
name := expression
- 与
var声明不同的是,短变量声明只能用于函数中
举个例子:
func main() {
// := 声明方式只能用于函数中
a, b, c := 1, "abc", 0
fmt.Println(a, b, c)
}
- Notes
在函数体内,尽量使用短变量声明
当短变量声明,左边的变量数量大于等于 2 时,对于在同一个语法块中已存在的变量,短变量声明的行为等于赋值,短变量声明等于赋值(前提:短变量声明最少声明一个变量)
举个例子:
func main() {
var a int = 1
var b string = "abc"
// 至少要声明一个变量 !!!
a, b, c := 2, "Hello", 0
fmt.Println(a, b, c)
}
1.3)new 函数
Go 语言还可以通过使用内置的 new 函数来创建变量,它的格式如下:
new(T)
表达式 new(T) 创建一个未命名的 T 类型的变量,初始化为对应的零值,返回其地址,所以左边的接收者为一个指针类型的变量。
举个例子:
a:= new(int)
fmt.Println(*a)
它的好处:不需要声明一个虚拟的名字
2. Printf 输出变量的常用转义字符
| 转义字符 | 描述 |
|---|---|
| %d | 十进制整数 |
| %b, %o, %x | 二进制,八进制,十六进制整数 |
| %f, %g, %e | 浮点数 |
| %t | 布尔型:(输出 true / false) |
| %c, %s | 字符,字符串 |
| %q | 带引号的字符("a")或字符串("abc") |
| %v | 内置格式的任何值 |
| %T | 任何值的类型 |
- Notes
当使用 以 ln 结尾的函数(如 Println) 使用
%v的方式来格式化参数
3. 变量的生命周期
生命周期:在程序执行过程中变量存在的时间段
- 包级别变量
它的生命周期是整个程序的执行时间
- 局部变量
它的生命周期是动态的,变量一直生存到它不可访问(通过垃圾回收机制来回收变量)
垃圾回收机制: 变量的路径源头:
- 每一个包级别的变量
- 每一个当前执行函数的局部变量
追溯该变量的路径源头,通过指针和其他方式的引用可以找到变量,如果变量路径不存在,那么变量就变得不可访问,此时被回收。