Go语言 - 变量 | 常量
标识符与关键字
标识符
在编程语言中标识符就是程序员定义的具有特殊意义的词,比如变量名、常量名、函数名等等。 Go语言中标识符由字母数字和_
(下划线)组成,并且只能以字母和_
开头。 举几个例子:abc
, _
, _123
, a123
。
关键字
关键字是指编程语言中预先定义好的具有特殊含义的标识符。 关键字和保留字都不建议用作变量名。
Go语言中有25个关键字:
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
此外,Go语言中还有37个保留字。
Constants: true false iota nil Types: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error Functions: make len cap new append copy close delete complex real imag panic recover
变量
我们编程的核心就是 业务逻辑 + 数据, 数据保存在内存中,以二进制的形式(内存地址)保存,当我们用一个变量来指定数据在内存中的地址,查找和读取会更方便
0101 --> 数据
name --> 数据
-
变量声明
1.Go语言中的变量需要声明后才能使用,
2.同一作用域内不支持重复声明同一变量。
3.并且Go语言的变量声明后必须使用, 且不能重复声明
4.Go语言中的每一个变量都有自己的类型
-
标准声明
var 变量名 类型var name string var age int var isOk bool
-
批量声明
var ( a string b int c bool d float32 )
-
变量的初始化
我们也可在声明变量的时候为其指定初始值
var 变量名 类型 = 表达式 var name string = "xionger" var age int = 18
或者一次初始化多个变量
var name, age = "xionger", 20
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。
var user = "haha" var pwd = 123
在函数内部,可以使用更简略的 :=
方式声明并初始化变量。
package main import ( "fmt" ) // 全局变量m var m = 100 func main() { n := 10 m := 200 // 此处声明局部变量m fmt.Println(m, n) }
-
匿名变量
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)
。 匿名变量用一个下划线_
表示,
// 匿名变量 // 定义一个函数 func foo()(string, int) { return "str", 100 } func main() { // 调用foo函数 // _ 用于接收不需要的值,可反复使用 aa, _ := foo() fmt.Println(aa) }
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明
常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把var
换成了const
,常量在定义的时候必须赋值。
const pi = 3.1415
const e = 2.7182
批量声明常量
const ( e = 10 t = 11.22 p = "p" )
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
const ( n1 = 100 n2 n3 ) n1, n2, n3 都是 100
-
iota 枚举
iota
是go语言的常量计数器,只能在常量的表达式中使用。
iota
在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota
计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。
const ( n1 = iota //0 n2 //1 n3 //2 n4 //3 )
几个常见的iota
示例:
利用 _
跳过某些值
const ( n1 = iota // 0 n2 // 1 _ // 2 n4 // 3 )
iota
声明中间插队
const ( p1 = iota // 0 p2 = 100 // 100 // const中每新增一行常量声明将使iota计数一次 p3 = iota // 2 p4 // 3 ) const p5 = iota // 0
定义数量级 (这里的<<
表示左移操作,1<<10
表示将1的二进制表示向左移10位,也就是由1
变成了10000000000
,也就是十进制的1024。同理2<<2
表示将2的二进制表示向左移2位,也就是由10
变成了1000
,也就是十进制的8。)
const ( _ = iota KB = 1 << (10 * iota) // 1 << 10 2的10次方 1024 MB = 1 << (10 * iota) // 1 << 20 2的20次方 1024 * 1024 GB = 1 << (10 * iota) TB = 1 << (10 * iota) PB = 1 << (10 * iota) )
多个iota
定义在一行
const ( a, b = iota + 1, iota + 2 // iota=0, a=1,b=2 c, d // iota=1, c=1+1=2,d=1+2=3 e, f // 3,4 )
补充:
1. const 声明中如果不写,默认和上一行一样
2. 遇到 const iota就初始化为零
3. const 中每曾加一行变量声明iota就递增1