变量和常量
变量
变量名由字母
、数字
、_
组成, 并且只能以字母和_开头。
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
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 语言中变量需要申明后才能使用, 同一作用域内不支持重复变量申明。且变量申明后必须要使用。
变量申明格式为:
var 变量名 变量类型
还可以批量申明:
var (
变量名 变量类型
变量名 变量类型
变量名 变量类型
...
)
变量初始化
Go 语言在变量申明时会自动进行内存初始化操作, 值为类型的默认值。
整形和浮点型的默认值为 0;
字符串的默认值为 空字符串;
布尔型的默认值为 false;
切片、函数、指针的默认值为 nil;
可以在变量申明时指定初始化值, 格式为
var 变量名 类型 = 变量值
// 例
var name string = "go"
还可以通过值来推导类型, 从而在初始化时不写类型
var 变量名 = 变量值
// 例如
var name = "go" // name 为 字符串 类型
多个变量同时初始化
var 变量名, 变量名 = 变量值, 变量名
// 例
var name, age = "go", 10
在函数中, 可以使用更简短的方式:=
来声明初始化变量, 此方式不能在函数外使用。
fun main(){
name := "go" // 省略 var 和 类型
}
匿名变量
匿名变量一般用在接收函数的返回值, 用于忽略某个返回值, 用一个下划线_
来表示。
匿名变量不占用命名空间, 不会分配内存, 即匿名变量之间不存在重复申明。
// 例
func ex() (string, int){
return "go", 10
}
func main() {
a, _ := ex()
_, b := ex()
}
常量
常量是个恒定不变的值。常量申明格式:
const 常量名 类型 = 常量值
同时可以去掉类型, 有值进行推导
const 常量名 = 常量值
多个常量同时申明
const (
常量名 = 常量值
常量名 = 常量值
)
const 在多个常量申明时, 如果省略了值就表示和上一个常量值相同
const (
a1 = 1
a2
a3 // a2 a3 值都为 1
)
iota
iota 是常量计数器, 初始值为 0, 只能在常量的表达式中使用。
iota 在 const 关键字出现时被重置为 0。
const 内每多增加一行常量申明, iota 计数将加 1。
const (
a1 = iota // 0
a2 // 1
a3 // 2
)
// 使用 _ 跳过某值
const (
a1 = iota // 0
_
a2 // 2
a3 // 3
)
// 中间添加其他值
const (
a1 = iota // 0
a2 = 200
a3 = iota // 2 使用 iota 重新对接上
a4 // 3
)
定义数量级
/*
<< 表示左移操作, 1<<2 表示将 1 的二进制数 向左移 2 位, 变为 100,也就是十进制的 11
*/
const (
_ = iota // 省略 0
KB = 1 << ( 10 * iota ) // iota 为 1, 1024
MB = 1 << ( 10 * iota ) // iota 为 2, 1024^2
GB = 1 << ( 10 * iota ) // iota 为 3, 1024^3
TB = 1 << ( 10 * iota ) // iota 为 4, 1024^4
)