02、Go语言基础_常量和变量
标识符
在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_
(下划线)组成,并且只能以字母和_
开头。 举几个例子:abc
, _
, _123
, a123
。
关键字
关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。
标识符:
1 | break default func interface select |
保留字:
1 | Constants: true false iota nil |
变量
变量类型
Go语言中的每一个变量都有自己的类型,并且 变量必须经过声明才能开始使用。
变量声明
Go语言中的变量需要声明后才能使用,同一作用域内不支持重复声明。 并且Go语言的非全局变量声明后必须使用,全局变量声明了但是可以不使用。
标准声明
var 变量名 类型
变量声明以关键字
var
开头,变量类型放在变量名的后面,行尾无需分号。1
2
3var name string
var age int
var isOk bool批量声明
每声明一个变量就需要写
var
关键字会比较繁琐,go语言中支持批量声明1
2
3
4
5var (
name string
age int
isOk bool
)变量的初始化
Go语言在声明变量的时候,自动会对变量的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值。
1 | string "" |
标准初始化
1 | var 变量名 类型 = 表达式 |
一次初始化多个变量
1 | var name, age = "李四", 20 |
类型推导
将变量的类型进行省略,这时候编译器会根据等号右边的值来推导变量的类型完成初始化。
1
2var age = 17
var name = "王二"短变量声明
在函数内部,可以使用
:=
的方式声明并初始化变量。1
2
3
4
5
6
7
8
9
10
11
12package main
import ("fmt")
// 全局变量 m
var m = 100
func main(){
n := 10
m := 200//此处声明局部变量m
fmt.Println(m,n)
}匿名变量
在使用多重赋值时,如果想忽略某个值,可以使用
匿名变量(anonymous variable)
,匿名变量用下划线_
表示。
1 | func foo()(int, string){ |
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明。
注意事项:
1、函数外的每个语句都必须以关键字开始(var, const, func等)
2、:=
不能在函数外使用
3、_
多用于占位符,表示忽略值。
常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var
换成了const
,常量在定义的时候必须赋值。
在整个程序运行期间它们的值都不能再发生变化了
- 普通声明
1 | //常量普通定义 |
批量声明
1
2
3
4
5//批量声明常量
const(
StatusOk = 200
StatusNotfound = 404
)1
2
3
4
5
6//批量声明常量时,如果在某一行声明后没有赋值,默认就和上一行一致
const(
a = 100 //100
b //100
c //100
)iota
iota
是go语言的常量计数器,只能在常量的表达式中使用。iota
在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota
计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。1
2
3
4
5
6//iota关键字在const出现时将被重制为0,当前const中每增加一行将使iota计数加1
const(
a1 = iota //0
a2 //1
a3 //2
)使用
_
跳过某些值1
2
3
4
5
6
7//使用匿名变量`_`跳过某些赋值,但iota任会加1
const(
b1 = iota //0
b2 //1
_ //2,但被丢弃
b3 //3
)插队
1
2
3
4
5
6
7//插队
const(
c1 = iota //0
c2 = 100 //c2=100,iota =1
c3 = iota //2 在同一个const不会被重置为0
c4 //3
)多个const定义在一行
1
2
3
4
5//多个iota定义在一行
const(
d1, d2 = iota + 1, iota + 2 // d1=1, d2=2 const中初次出现iota=0,同一行,iota只加一次
d3, d4 = iota + 1, iota + 2 // d3=2, d4=3
)定义数量级
1
2
3
4
5
6
7
8
9//定义数量级
const(
_ = iota
KB = 1 << (10 * iota) //1Kb
MB = 1 << (10 * iota) //1Mb
GB = 1 << (10 * iota) //1Gb
TB = 1 << (10 * iota) //1Tb
PB = 1 << (10 * iota) //1Pb
)