一、变量
程序运行过程中的数据都是保存在内存中,我们想要在代码中操作某个数据时就需要去内存上找到这个变量,但是如果我们直接在代码中通过内存地址去操作变量的话,代码的可读性会非常差而且还容易出错,所以我们就利用变量将这个数据的内存地址保存起来,以后直接通过这个变量就能找到内存上对应的数据了。
1. 声明
// 标准声明:var 变量名 变量类型
var name string
// 批量声明:
var (
a string
b int
)
2. 初始化
var name string = "Go"
// 类型推导:
var name = "Go"
// 一次初始化多个变量:
var name, age = "Go", 10
// 短变量声明:
shortName := "Go"
// 匿名变量:
_ = "Go" // 匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。
3. 值类型与引用类型
-
int
、float
、bool
和string
以及数组
和结构体
都属于值类型 -
指针
、slices
、maps
和channel
属于引用类型
二、常量
常量使用方式与变量极为相似,只是常量在定义的时候必须赋值。
1. 声明
const pi = 3.1415
const a, b = 0, 1
// 多个常量一起声明
const (
a = "33"
b = 44
c // 如果省略了值则表示和上面一行的值相同
)
// 常量用作枚举
const (
Unknown = 0
Female = 1
Male = 2
)
2. 常量计数器iota
iota
是go语言的常量计数器,只能在常量的表达式中使用。
iota
在const
关键字出现时将被重置为0。const
中每新增一行常量声明将使iota
计数一次(iota
可理解为const
语句块中的行索引)。 使用iota
能简化定义,在定义枚举时很有用。
const (
a = iota // 0
b // 1
_ // 跳过
c // 3
d = 100 // iota声明中间插值
e = iota // 5
)
const n = iota // 0
// 定义数量级 (这里的<<表示左移操作,1<<10表示将1的二进制表示向左移10位,也就是由1变成了10000000000,也就是十进制的1024。同理2<<2表示将2的二进制表示向左移2位,也就是由10变成了1000,也就是十进制的8。)
const (
_ = iota
KB = 1 << (10 * iota)
MB
GB
TB
PB
EB
ZB
YB
)
// 多个iota定义在一行
const (
a, b = iota + 1, iota + 2 // 1, 2; iota此处并未新增一行常量,iota == 0
c, d // 2, 3; iota + 1 = 2, iota + 2 = 3,iota == 1
e, f // 3, 4
)
参考文献
有疑问加站长微信联系(非本文作者)