作为静态类型语言,go语言总是有固定的数据类型,类型决定了变量内存的长度和存储格式。我们只能修改变量值,无法改变变量类型(通过类型转化或指针操作,我们可用不同方式修改变量值,但这并不意味着改变了变量类型)
一、变量声明
go语言中的变量需要声明以后才能使用,同一作用域内不支持重复声明,并且Go语言的变量声明后必须使用。
go语言的变量声明格式:
var 变量名 变量类型
可一次定义多个类型,包括用不同初始值定义不同类型
var x, y int
var a, s = 100, "abc" //不同类型初始化
依照惯例,建议以组的方式整理多行变量定义
var (
x, y int
a, s = 100, "abc"
)
短变量声明:
func main() {
x := 100
a, x := 1, "abc"
}
短变量声明注意事项:
》定义变量,同时显示初始化
》不能提供数据类型
》只能在函数内部使用(main函数)
》可以重复使用err变量
匿名变量:
在使用多重赋值时,如果希望忽略某个值,可以使用匿名变量,用下划线_表示
func foo() (int, string) {
return 10, "Q1mi"
}
func main() {
x, _ := foo()
_, y := foo()
fmt.Println("x=", x)
fmt.Println("y=", y)
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。
"_"空标识符(匿名变量)可以用来临时规避编译器对未使用变量和导入包的错误检查,但请注意,它是预置成员,不能重新定义。
多变量赋值:
再进行多变量赋值操作时,首先计算出所有右值,然后再依次完成赋值操作
func main() {
x, y := 1, 2
x, y = y + 3, x + 2
fmt.Println(x, y)
}
未使用错误:
编译器将未使用的局部变量当作错误。
二.常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。常量的声明和变量的声明非常类似,只是把var换成了const,常量在定义的时候必须赋值。
常量值必须是编译期可确定的字符、字符串、数字或布尔值。可指定常量类型,或由编译器通过初始化值推断,不支持C/C++数字类型后缀。
const pi = 3.1415
const e = 2.7182
const (
a = 1
b = 2
)
常量值也可以是某些编译器能计算出结果的表达式,unsafe.Sizeof、len、cap等
const a = len(b)
在常量组中如不指定类型和初始化值,则与上一行非空常量右值相同
const (
n1 = 100
n2
n3
)