Go语言的关键字与标识符
标识符就是标识某个实体的一个符号,也就是给实体起的名字,从而将其与其他实体区分开。例如,在日常生活中有许多交通工具,发明者给它们起了名字,如下图所示。
图:生活中的标识符
当然,在不同的环境下,标识符含义也不相同。比如嬴政,在现实生活中是历史人物秦始皇,而在游戏《王者荣耀》中就是一个法师英雄,如下图所示。
图:嬴政
自定义标识符实际上是一个或多个字母
Go语言不允许在自定义标识符中使用“@”、“$”或“%”等符号,也不允许将关键字用作自定义标识符。如果将预定义标识符用作自定义标识符,那么自定义标识符的含义会覆盖预定义标识符,容易造成程序混乱。另外,Go语言是一种区分大小写的编程语言。因此,Manpower 和 manpower 是两个不同的标识符。
错误的自定义标识符示例如下表所示:
需要注意的是,在现实生活中,名字可以重复,比如可能有很多人叫作张三,但是在Go语言中,标识符绝对不能重复,要确保每个标识符都代表一个独立的个体。
图:生活中的标识符
当然,在不同的环境下,标识符含义也不相同。比如嬴政,在现实生活中是历史人物秦始皇,而在游戏《王者荣耀》中就是一个法师英雄,如下图所示。
图:嬴政
1、预定义标识符
预定义标识符是Go语言系统预先定义的标识符,具有见名知义的特点,例如函数“输出”(printf)、“新建”(new)、“复制”(copy)等。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。下面列举了 36 个预定义标识符,如下表所示。append | bool | byte | сар | close | complex | complex64 | complex128 | uint16 |
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint16 |
println | real | recover | string | true | uint | uint8 | uintptr |
2、关键字
Go语言的关键字是系统自带的,是具有特殊含义的标识符。Go语言中内置了 25 个关键字用于开发。下面列举了Go语言代码中会使用到的 25 个关键字或保留字,如下表所示。break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
for | import | return | var | continue |
3、自定义标识符
用户根据需要自定义的标识符,一般用来给变量、类型、函数等程序实体起名字。自定义标识符实际上是一个或多个字母
A~Z 和 a~z
、数字0~9
、下画线_
等组成的序列,但是第一个字符必须是字母或下画线,而不能是数字。Go语言不允许在自定义标识符中使用“@”、“$”或“%”等符号,也不允许将关键字用作自定义标识符。如果将预定义标识符用作自定义标识符,那么自定义标识符的含义会覆盖预定义标识符,容易造成程序混乱。另外,Go语言是一种区分大小写的编程语言。因此,Manpower 和 manpower 是两个不同的标识符。
错误的自定义标识符示例如下表所示:
错误的自定义标识符 | 错误原因 |
---|---|
1xy | 以数字开头 |
case | Go语言的关键字 |
chan | Go语言的关键字 |
nil | 预定义标识符 |
需要注意的是,在现实生活中,名字可以重复,比如可能有很多人叫作张三,但是在Go语言中,标识符绝对不能重复,要确保每个标识符都代表一个独立的个体。