Go语言:标识符命名规则
标识符实际是名称的另一种叫法,它包括了变量名、函数名、方法名、类型名、包名等。Go语言规定了有下面几点命名的语法要求。
首字符必须是unicode字母或者下划线(_)
先要说明,unicode字母并非只是英文字母表里的26个字母,汉字也是属于Unicode字母。对Unicode字母感兴趣的可以参考:The Unicode Standard 8.0, Section 4.5。
换句话说,除了下划线(_)外的标点符号和数字都是不能作为标识符的首字符。
符合规则的名称:
Name,store,_animal,中文,한국어
违反规则的名称
7_11,$dollars,¥人民币,#store
除首字母外,后面的字符可以是unicode字母,数字和下划线
这条规则限定了组成标识符的字符构成,不能包含如空格,标点符号。
符合规则的名称
_华为_,_7_11,iphone13,int
违反规则的名称
dollar$,blank space,You&Me
Go语言标识符里字母是区分大小写的
标识符区分大小写,如Name和name表示两个不同的标识符。
保留字不能使用作为标识符
以下25个关键词是作为Go语言的保留字,不能用作标识符。
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语言只限制了以上保留字不能作为标识符,其他符合规则的名称都可以使用,但Go语言还有一些是预声明和内置的常量名,类型名以及函数名:
常量名 true false iota nil
类型名 int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64
float32 float64 complex128 complex64
bool byte rune string error
函数名 make len cap new append copy close delete
complex real imag panic recover
虽然这些名称不是保留字,为了避免产生歧义,强烈建议不要把他们作为标识符使用。
标识符字符长度不限
虽然Go语言规则上没有限制,在Go语言官方在规范上是推荐使用短的变量名称,特别是作用域比较小的本地变量。如在for循环中使用i,而非indexOfLoop。
有这样一个规则:作用域小的变量,在不影响代码可读性的前提下,尽量使用短的名称;而应用在大作用域的变量,使用更具描述性的名称,这样名称相对长点。
标识符可见性:要在package外公开的标记符必须以大写字母开头
Go语言中,标记符的可见范围是由标识符是定义所在的位置以及它名称首字母确定。
1. 位置:函数内定义,首字符无关
在函数内定义的标记符,可见范围也就是作用域是在函数内部,即函数本地。
2. 位置:函数外定义,首字母小写
在函数外定义的标记符,不管首字母是否大写,在声明为同一个package里的所有文件里是可见的。但对于不在同一package的文件,小写开头的标记符是不可见的。
如:test1.go 文件
package test
import "fmt"
func visibleInPkg() {
fmt.Printf("inside package")
}
func VisibleOutside() {
fmt.Printf("outside package")
}
test2.go文件
package test
func test2() {
visibleInPkg()
}
3. 位置函数外定义,首字母为大小
如果要在package外使用定义的标记符,如函数,那么它的标记符首字母必须大写,如fmt的Printf()函数。
如:test3.go
package testoutside
import "test"
func test() {
test.VisibleOutside()
}
规范:同一使用驼峰式命名
这是一个Go语言的命名规范,不是必须的规则。目前计算机语言对于由多个单词构成的名称,一般由两种做法:
- 驼峰式命名,分为小驼峰法和大驼峰法。
- 单词之间使用下划线隔开
小驼峰法第一个单词以小写字母开始,第二个单词的首字母大写或每一个单词的首字母都采用大写字母。如
firstName,lastName
相比小驼峰法,大驼峰法把第一个单词的首字母也大写了
FirstName,LastName