命名规则
这里说的命名规则适用于 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
变量
标准声明
变量声明以关键字 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 变量名 类型 = 表达式
例:
var name string = "Q1mi"
var age int = 18
或者一次初始化多个变量:
var name, age = "Q1mi", 20
类型推导
有时候我们会将变量的类型省略,这个时候编译器会根据等号右边的值来推导变量的类型完成初始化,比如:
var name = "Q1mi"
var age = 18
短变量声明
在函数内部,可以使用更简略的 :=
方式声明并初始化变量。
package main
import "fmt"
func main() {
s1 := "hello"
fmt.Print(s1)
}
匿名变量
在使用多重赋值时,如果想要忽略某个值,可以使用匿名变量(anonymous variable)。 匿名变量用一个下划线_表示,例如:
package main
import "fmt"
// 定义一个函数返回两个值
func test() (int, string) {
return 100, "hello"
}
func main() {
// 使用 _ 在接收多个值时忽略某个值
n1, _ := test()
_, s1 := test()
fmt.Println(n1)
fmt.Println(s1)
}
匿名变量不占用命名空间,不会分配内存,所以匿名变量之间不存在重复声明(在 Lua 等编程语言里,匿名变量也被叫做哑元变量)。
注意事项
- 函数外的每个语句都必须以关键字开始(
var
、const
、func
等)。 :=
不能使用在函数外。_
多用于占位,表示忽略值。
常量
基本使用
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。 常量的声明和变量声明非常类似,只是把 var
换成了 const
,常量在定义的时候必须赋值。
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
能简化定义,在定义枚举时很有用。
下面列出一些 iota
的使用案例。
- 正常使用。
const (
n1 = iota // 0
n2 // 1
n3 // 2
n4 // 3
)
- 使用
_
跳过某些值。
const (
n1 = iota // 0
n2 // 1
_
n4 // 3
)
iota
声明中间插队:
const (
n1 = iota // 0
n2 = 100 // 100
n3 = iota // 2
n4 // 3
)
const n5 = iota // 0
- 定义数量级:
const (
_ = iota
KB = 1 << (10 * iota)
MB = 1 << (10 * iota)
GB = 1 << (10 * iota)
TB = 1 << (10 * iota)
PB = 1 << (10 * iota)
)
- 多个
iota
定义在一行:
const (
a, b, c = iota + 1, iota + 2, iota + 3 // 1,2,3
d, e, f // 2,3,4
g, h, i // 3,4,5
)
评论区