变量的定义
在计算机编程中,变量是一种储存数据的容器,表示程序运行时会动态改变的数据。
Go语言中,变量需要先声明才能使用;我们可以使用 var
关键字来声明变量,声明格式如下:
var 变量名 变量类型
例如,定义一个整型变量:
var num int
Go语言中,变量的声明格式是变量名在前类型在后,与大部分语言相反;变量声明之后,会被赋予零值,不同类型的变量零值不同(如数值类型零值为0,字符串类型为空串"")。
需要注意的是,如果一个变量在声明之后未被使用,编译器是会报错的。
func main() {
var num int
var str string
fmt.Printf("%q, %d", str, num)
}
运行结果:
"", 0
变量的赋值
要想给一个已经定义好的变量赋值进行赋值操作,可以使用等号赋值(=)操作符:
num = 10
我们也可以在声明的同时进行赋值操作:
var num int = 10
在声明并赋值时,变量的类型可以省略,由编译器自行推断类型:
var num = 10
var str = "aaa"
Go语言也支持同时定义和赋值多个变量:
var a, b, c int = 1, 2, 3
a, b, c = 4, 5, 6
定义多个变量时可以省略变量类型,这样在就可以一次定义多种类型的变量:
var a, b, c = 1, "aaa", true
也可以使用 var()
的方式:
var (
a = 1
b = "aaa"
c = true
)
Go语言中还有一种更简单的变量声明方式,就是使用 :=
符号,可以省略 var
关键字:
nun := 10
a, b, c := 1, "aaa", true
需要注意的是,这短声明方式只适用于函数内部,在函数外使用会编译错误。
此外,当 :=
用于声明已经存在的变量,或用于多个变量声明和初始化,它会退化为赋值操作符 =
。例如:
a := 10
a, b := 20, "hello"
在上述代码中,:=
等价于 =
,仅指示一个赋值操作,而不是一个声明和初始化的操作符。
因此,需要注意在使用 :=
进行变量声明赋值操作时,尽量不要和已存在的变量重名。
变量的作用域
变量的作用域指的是变量在程序中有效的范围。通常情况下,变量的作用域只存在于大括号 {}
内。
在Go语言中,变量的作用域取决于它们被声明的位置。一般可以将变量的作用域分为以下几种:
- 代码块:在函数或语句块中声明的变量只在其所在的代码块中有效;
- 函数:在函数中声明的变量在整个函数中都有效;
- 包:在包级别中声明的变量在整个包中都有效。
var a = 10
func main() {
num := 5
if a - num > 0 {
message := "a - num > 0"
fmt.Println(message)
}
}
在上述代码中,变量 a
在整个包中有效;变量 num
在整个 main
函数中;变量 message
仅在这个 if
代码块中有效。