📅  最后修改于: 2023-12-03 15:01:02.014000             🧑  作者: Mango
Golang 是一门静态类型的语言,变量在使用前必须被声明,并且变量类型和值类型需要匹配,下面让我们来详细讨论一下 Golang 中的变量。
在 Golang 中,可以使用 var
关键字来声明变量。变量声明的语法如下:
var 变量名 变量类型
例如,声明一个整型变量 i
,代码如下所示:
var i int
变量声明语句可以批量声明多个变量,如下所示:
var a, b, c int
在变量声明时,可以使用短变量声明语法 :=
来同时完成变量的声明和赋值,如下所示:
x := 10
这行代码声明了变量 x
并赋值为 10。需要注意的是,使用短变量声明语法时,只能够用在函数内部,而不能在函数外部使用。
在 Golang 中,可以使用赋值语句 =
来给变量赋值,代码如下所示:
i = 10
赋值语句可以与变量声明一起使用,如下所示:
var i int = 10
在多个变量赋值时,也可以使用括号来对变量进行分组,如下所示:
var (
j int = 1
k int = 2
)
需要注意的是,在 Golang 中,变量必须在使用之前被赋值,否则编译器会报错。另外,一条赋值语句可以赋多个变量,如下所示:
i, j, k = 1, 2, 3
Golang 是一门静态类型的语言,变量在声明时必须指定类型,例如:
var i int = 10
如果不指定变量类型,编译器就会根据变量的初始值来推导出变量类型,如下所示:
var i = 10 // 推导出 i 的类型为 int
在 Golang 中,也可以使用 :=
简化变量声明和赋值,这样编译器会根据变量的初始值自动推导出变量类型,代码如下所示:
i := 10 // 推导出 i 的类型为 int
需要注意的是,当一个变量被声明但没有被赋初值时,Golang 会赋予此变量一个默认零值,例如:
false
0
""
nil
在 Golang 中,变量的作用域决定了变量的可见范围,下面介绍 Golang 中的三种变量作用域:
在函数定义外部声明的变量即为全局变量,全局变量对整个程序都可见,如下所示:
var str = "hello, world" // 全局变量
func main() {
fmt.Println(str) // 可以访问全局变量 str
}
在函数内部声明的变量即为局部变量,局部变量只在函数内部可见,如下所示:
func main() {
var i int // 局部变量
fmt.Println(i) // 局部变量 i 未初始化,输出为 0
}
在块级作用域中声明的变量,只在该块级作用域中有效,例如:
func main() {
i := 1
if i > 0 {
j := 1 // 块级作用域变量 j
fmt.Println(j)
}
// 在这里访问变量 j,编译器会报错
// fmt.Println(j)
}
需要注意的是,在 Golang 中,并不存在 JavaScript 中常见的块级作用域和函数作用域的概念,只有全局作用域和局部作用域的区分。