Go变量和常量
变量
由来
程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。
变量声明
-
标准声明
var 变量名 变量类型 // 例: var age int
-
批量声明
var ( a string b int c bool d float32 )
变量初始化
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为0
。 字符串变量的默认值为空字符串
。 布尔型变量默认为false
。 切片、函数、指针变量的默认为nil
。
-
标准初始化
var 变量名 类型 = 表达式 // 例: var age int = 18 var age, name = 18, "xiaoming"
-
类型推导
当将变量的类型省略时,编译器会根据等号右边的值来推导变量的类型完成初始化
var age = 18 var name = "xiaoming"
-
函数内部声明并初始化
在函数内部,可以使用更简略的
:=
方式声明并初始化变量。package main import ( "fmt" ) func main(){ a := 100 fmt.Println(a) }
-
匿名变量
在使用多重赋值时,如果想要忽略某个值,可以使用下划线
_
,例如:package main import ( "fmt" ) func fn()(int, string){ return 18, 'xiaoming' } func main(){ age, _ := fn() fmt.Println(age) }
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。
tags:
- 函数外的每个语句都必须以关键字开始(
var
、const
、func
等) :=
不能使用在函数外。_
多用于占位,表示忽略值。
常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var
换成了const
,常量在定义的时候必须赋值。
常量声明
-
标准声明
const pi = 3.14
-
多个声明
const ( a = 1 b = true )
-
省略值处理
当使用
const
声明多个值时,如果省略了值,则会与上一行的值相同,如果开始的未声明则报错const ( a1 = 100 // a1未声明则会报错 a2 // 100 a3 // 100 )
iota
iota
是go语言的常量计数器,只能在常量的表达式中使用。
iota
在const
关键字出现时将被重置为0。const
中每新增一行常量声明将使iota
计数一次(iota
可理解为const
语句块中的行索引)。 使用iota
能简化定义,在定义枚举时很有用。
-
示例
const ( n1 iota // 0 n2 // 1 n3 // 2 n4 // 3 )
-
示例
const ( n1 iota // 0 n2 // 1 _ n4 // 3 )
-
示例
const ( n1 iota // 0 n2 = 11 n3 // 2 )
-
示例
const ( _ = iota a_10 = 1<<iota a_100 = 1<<iota a_1000 = 1<<iota )