变量
变量是用来存储用户数据的。在编程过程中,会有许多不同的对象类型,那么对于不同的对象类型,我们就需要不同的变量类型来存储不同类型的用户数据。
变量声明
1.标准格式
变量的声明以关键字var开头,后接变量类型,行尾没有其他标点符号。
标准格式:
var 变量名 变量类型
//例:声明一个int类型的变量num
var num int
//例:声明多个int类型的变量
var num,cnt int
2.批量变量声明格式
在实际的编程过程中,我们往往需要同时声明多个变量,这种情况我们就需要使用批量声明变量。
使用关键字var和小括号,可以同时声明多个变量。
Go语言变量的批量声明格式如下:
var (
a int
b float
c bool
)
变量初始化
Go语言在声明变量时,会自动对每个变量对应的内存区域进行初始化,即每个变量会有其类型对应的默认值:
- 整型和浮点型变量的默认值为0
- 字符串变量的默认值为空字符串("")
- 布尔类型变量默认为false
- 切片、映射、函数和指针变量默认为nil
注意:nil相当于其他编程语言中的null、None和NULL等,指代零值,在Go语言中只能赋值给切片、映射、函数、接口、指针、或通道类型。
1.标准格式:
var 变量名 变量类型 = 表达式
//例:声明一个int类型的变量num,初值为1
var num int = 1
2.编译器推导类型格式
在标准格式基础上,把变量类型省略后,编译器会根据"="右边的表达式来推导变量的类型。
//例:使用此格式初始化变量age值为30
var age = 30
//在这里编译器会自动推导出变量age为int类型变量
3.短变量声明
变量声明并初始化时有一种更为简洁的写法。
例:a := 20
使用短变量声明并初始化时,编译器同样会根据等号右边的表达式推导变量的类型。
相对于前两种变量的初始化方法,短变量声明并初始化方法在开发中使用最为普遍。
短变量声明多重赋值
package main
import "fmt"
func main(){
name,age := "Tom",12
fmt.Println("name:",name + "\n" + "age:" ,age)
}
执行结果:
name: Tom
age: 12
但是,使用短变量声明并初始化时,需注意变量重复声明的情况:
package main
import "fmt"
func main(){
var name string
name := "Tom"
fmt.Println("name:",name)
}
执行结果:
.\test.go:5:7:no new variables on left side of := (exit status 1)
很显然,编译器报错:在“:=”的左边没有新变量出现,因为name变量已经在代码的第四行中被声明了。
但是,在多个短变量声明并初始化中,应至少有一个新声明的变量出现在左值中,这样即使其他变量名存在重复声明的情况,编译器也不会报错。
package main
import "fmt"
func main(){
var name string
name,age := "Tom",12
fmt.Println("name:",name + "\n" + "age:" ,age)
}
执行结果:
name: Tom
age: 12
变量值交换
实际编程中,我们经常会用到变量值的交换,比如需要交换变量a和变量b的值,我们通常会通过中间变量c进行交换,代码如下:
package main
import "fmt"
func main(){
var c int //先声明c
a := 1
b := 3
fmt.Println(a,b) //交换前a,b的值
c = a
a = b
b = c
fmt.Println(a,b) //交换后a,b的值
}
执行结果:
1 3
3 1
在Go语言中,变量值的交换可以不再使用这种复杂的写法,而是通过多重赋值的特性,完成变量值的交换工作。
package main
import "fmt"
func main(){
a,b := 1,3
fmt.Println(a,b) //交换前a,b的值
a,b = b,a
fmt.Println(a,b) //交换后a,b的值
}
执行结果:
1 3
3 1
多重赋值时,变量的左值和右值按照从左到右的顺序依次赋值。
短变量声明使用限制
短变量声明是一种在 Go 中用于声明和初始化变量的简洁方式,使用 := 操作符。尽管它非常方便,但在使用时有一些限制和注意事项:
- 仅在函数内部使用: 短变量声明只能在函数内部使用,不能在函数外部进行声明。
- 至少有一个新变量: 短变量声明必须至少声明一个新的变量。如果已经存在于同一作用域的变量名,则会发生编译错误。
- 至少一个变量有新的值: 如果使用短变量声明初始化变量,至少有一个变量必须是新声明的,而且必须有一个新的值。不能在同一行上仅仅为已有变量赋新值。
- 类型推断: 短变量声明会根据初始化表达式的值来推断变量的类型,因此变量类型不需要显式指定。
- 至少一个声明: 短变量声明中至少要有一个变量名,不允许出现空的
:=。
小结
学习 Go 变量声明与初始化是编写有效和可维护代码的重要一步。以下是关于 Go 变量声明与初始化的学习总结:
-
变量声明:
- 使用
var关键字声明变量,语法为var 变量名 变量类型。 - Go 是静态类型语言,类型在编译时确定。
- 可以同时声明多个变量,使用逗号分隔,例如:
var x, y int。
- 使用
-
变量初始化:
- 变量初始化是在声明变量的同时为其赋初值。
- 可以使用
=赋值操作符来初始化变量,例如:var age = 25。 - 可以使用短变量声明
:=在函数内部声明并初始化变量,例如:name := "Alice"。 - 变量初始化可以根据初始值自动推断类型,无需显示指定类型。