mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2024-11-28 17:19:06 +00:00
37 lines
2.8 KiB
Markdown
37 lines
2.8 KiB
Markdown
## 2.1. 命名
|
||
|
||
Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。
|
||
|
||
Go语言中类似if和switch的关键字有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
|
||
```
|
||
|
||
此外,还有大约30多个预定义的名字,比如int和true等,主要对应内建的常量、类型和函数。
|
||
|
||
```
|
||
内建常量: true false iota nil
|
||
|
||
内建类型: int int8 int16 int32 int64
|
||
uint uint8 uint16 uint32 uint64 uintptr
|
||
float32 float64 complex128 complex64
|
||
bool byte rune string error
|
||
|
||
内建函数: make len cap new append copy close delete
|
||
complex real imag
|
||
panic recover
|
||
```
|
||
|
||
这些内部预先定义的名字并不是关键字,你可以在定义中重新使用它们。在一些特殊的场景中重新定义它们也是有意义的,但是也要注意避免过度而引起语义混乱。
|
||
|
||
如果一个名字是在函数内部定义,那么它的就只在函数内部有效。如果是在函数外部定义,那么将在当前包的所有文件中都可以访问。名字的开头字母的大小写决定了名字在包外的可见性。如果一个名字是大写字母开头的(译注:必须是在函数外部定义的包级名字;包级函数名本身也是包级名字),那么它将是导出的,也就是说可以被外部的包访问,例如fmt包的Printf函数就是导出的,可以在fmt包外部访问。包本身的名字一般总是用小写字母。
|
||
|
||
名字的长度没有逻辑限制,但是Go语言的风格是尽量使用短小的名字,对于局部变量尤其是这样;你会经常看到i之类的短名字,而不是冗长的theLoopIndex命名。通常来说,如果一个名字的作用域比较大,生命周期也比较长,那么用长的名字将会更有意义。
|
||
|
||
在习惯上,Go语言程序员推荐使用 **驼峰式** 命名,当名字有几个单词组成的时优先使用大小写分隔,而不是优先用下划线分隔。因此,在标准库有QuoteRuneToASCII和parseRequestLine这样的函数命名,但是一般不会用quote_rune_to_ASCII和parse_request_line这样的命名。而像ASCII和HTML这样的缩略词则避免使用大小写混合的写法,它们可能被称为htmlEscape、HTMLEscape或escapeHTML,但不会是escapeHtml。
|