02-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
变量
声明变量
- Go语言中的变量需要声明后才能使用
- 同一作用域内不支持重复声明。
标准声明
-
Go语言的变量声明格式为:
var 变量名 变量类型
-
变量声明以关键字
var
开头,变量类型放在变量的后面,行尾无需分号。 举个例子:var name string var age int var isOk bool
批量声明
-
每声明一个变量就需要写
var
关键字会比较繁琐,go语言中还支持批量变量声明:var ( a string b int c bool d float32 )
变量的初始化
-
初始化后未赋值,默认值:
-
Go语言在声明变量的时候,会自动对变量对应的内存区域进行初始化操作。每个变量会被初始化成其类型的默认值,例如: 整型和浮点型变量的默认值为
0
。 字符串变量的默认值为空字符串
。 布尔型变量默认为false
。 切片、函数、指针变量的默认为nil
。var ( a string // "" b int // 0 c bool // false )
-
-
当然我们也可在声明变量的时候为其指定初始值。变量初始化的标准格式如下:
var 变量名 类型 = 表达式 // 例:初始化单个变量 var name string = "Q1mi" var age int = 18 // 例:初始化多个变量 var name, age = "Q1mi", 20
类型推导
-
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化。
var name = "Q1mi" // 字符串类型 var age = 18 // int类型
短变量声明
-
只能在函数内部,可以使用更简略的
:=
方式声明并初始化变量。package main import ( "fmt" ) // 全局变量m var m = 100 func main() { n := 10 m := 200 // 此处声明局部变量m fmt.Println(m, n) }
赋值
func main() {
// 直接赋值
var v1 int = 18
v2 := 25
// 多重赋值
var v3, v4 = 3,4
fmt.Println(v1,v2,v3,v4)
}
匿名变量
-
在使用多重赋值时,如果想要忽略某个值,可以使用
匿名变量
。 匿名变量用一个下划线_
表示,例如: -
_(匿名变量)用于接收不需要的值
// 定义有两个返回值的函数 func foo()(string,int){ return "liyn", 18 } func main() { // 调用foo函数,只想用第一个参数,第二个参数可以用_来替换 a, _ := foo() fmt.Println(a) _, b := foo() fmt.Println(b) }
常量
-
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把
var
换成了const
,常量在定义的时候必须赋值。 -
声明了
pi
和e
这两个常量之后,在整个程序运行期间它们的值都不能再发生变化了。const pi = 3.1415 const e = 2.7182
-
多个常量也可以一起声明:
const ( pi = 3.1415 e = 2.7182 )
-
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
const ( n1 = 100 n2 n3 ) // 常量n1,n2,n3的值都是100
枚举:iota
-
iota
是go语言的常量计数器,只能在常量的表达式中使用。 -
iota
在const关键字出现时将被重置为0。const中每新增一行常量声明将使iota
计数一次(iota可理解为const语句块中的行索引)。 使用iota能简化定义,在定义枚举时很有用。const ( a = iota // 0 b = iota // 1 c = iota // 2 d // 3 _ // 4 e // 5 ) func main() { fmt.Println(a,b,c,d,e) }
-
定义数量级 (这里的
<<
表示左移操作,1<<10
表示将1的二进制表示向左移10位,也就是由1
变成了10000000000
,也就是十进制的1024。同理2<<2
表示将2的二进制表示向左移2位,也就是由10
变成了1000
,也就是十进制的8。)const ( _ = iota // 0 KB = 1 << (10 * iota) // 1024 MB = 1 << (10 * iota) GB = 1 << (10 * iota) TB = 1 << (10 * iota) PB = 1 << (10 * iota) )
-
二进制运算
// 末尾数为2的0次方,依次往上数2的1次方,2的2次方。。。。。 1 = 2的0次方=1 10 = 1*2的1次方 + 0*2的0次方 = 2 11 = 1*2的1次方 + 1*2的0次方 = 3 110 = 1*2的2次方 + 1*2的1次方 + 0*2的0次方 = 6
-
iota总结
const
声明如果不写,默认就和上一行一样iota
如果不在同一个const
里,就重置为0const
中每增加一行变量声明iota
就递增1