介绍
- Go语言的词法元素包括 5 种:
- 标识符(identifier)
- 关键字(keyword)
- 操作符(operator)
- 分隔符(delimiter)
- 字面量(literal)
关键字
- 关键字即是被Go语言赋予了特殊含义的单词,也可以称为保留字。一共有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语言中还存在着一些特殊的标识符,叫做预定义标识符,一共有 36 个,主要包含Go语言中的基础数据类型和内置函数,这些预定义标识符也不可以当做标识符来使用。
append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 |
---|---|---|---|---|---|---|---|---|
copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 |
int32 | int64 | iota | len | make | new | nil | panic | uint64 |
println | real | recover | string | true | uint | uint8 | uintptr |
普通标识符
- 标识符是指Go语言对各种变量、方法、函数等命名时使用的字符,通俗的讲就是凡可以自己定义的名称都可以叫做标识符。
- 在使用标识符之前必须进行声明,声明一个标识符就是将这个标识符与常量、类型、变量、函数或者代码包绑定在一起。在同一个代码块内 {} 标识符的名称不能重复。
命名规则
- 标识符由若26个英文字母、下划线
_
、和0-9数字组成。 - 第一个字符必须是字母,不能以数字开头,例如 1num 是错误的。
- Go语言中严格区分大小写。
- 标识符不能包含空格。
不能以系统保留关键字作为标识符,比如 break,if 等等。
命名建议
标识符的命名要尽量采取简短且有意义。
- 不要和标准库中的包名重复。
- 为变量、函数、常量命名时采用驼峰命名法,例如 stuName、getVal。
- 如果首字母大写,则表示它可以被其它的包访问(类似于 Java 中的 public);如果首字母小写,则表示它只能在本包中使用 (类似于 Java 中 private)。
运算符
介绍
- 运算符是用来在程序运行时执行数学或逻辑运算的。
- 一个表达式可以包含多个运算符,当表达式中存在多个运算符时,就会遇到优先级的问题,大部分运算符的优先级和数学中是一样的,搞不清的可以加括号。
- Go语言有几十种运算符,优先级值越大,表示优先级越高。
- 运算符的结合性是指相同优先级的运算符在同一个表达式中,且没有括号的时候,操作数计算的顺序,通常有从左到右和从右到左两种方式,例如,
+
加法运算符的结合性是从左到右,那么表达式a + b + c
则可以理解为为(a + b) + c
。
优先级 | 分类 | 运算符 | 结合性 |
---|---|---|---|
1 | 逗号运算符 | , | 从左到右 |
2 | 赋值运算符 | =、+=、-=、*=、/=、 %=、 >=、 <<=、&=、^=、|= | 从右到左 |
3 | 逻辑或 | || | 从左到右 |
4 | 逻辑与 | && | 从左到右 |
5 | 按位或 | | | 从左到右 |
6 | 按位异或 | ^ | 从左到右 |
7 | 按位与 | & | 从左到右 |
8 | 相等/不等 | ==、!= | 从左到右 |
9 | 关系运算符 | <、<=、>、>= | 从左到右 |
10 | 位移运算符 | <<、>> | 从左到右 |
11 | 加法/减法 | +、- | 从左到右 |
12 | 乘法/除法/取余 | *(乘号)、/、% | 从左到右 |
13 | 单目运算符 | !、*(指针)、& 、++、—、+(正号)、-(负号) | 从右到左 |
14 | 后缀运算符 | ( )、[ ]、-> | 从左到右 |
例子
先乘除后加减。
var a, b, c int = 16, 4, 2
d := a + b*c // 24
d := (a + b)*c // 40
注释
介绍
- 注释在程序中的作用是对程序进行注解和说明,便于对源码的阅读。合理地添加注释,能够提高源码的可读性。
- 编译系统在对源代码进行编译时会自动忽略注释的部分,因此注释对于程序的功能实现不起任何作用。
- 注释分为两类,分别是单行注释和多行注释。
- 单行注释:简称行注释,是最常见的注释形式,可以在任何地方使用以
//
开头的单行注释。 - 多行注释:简称块注释,以
/*
开头,并以*/
结尾,且不可以嵌套使用,一般用于文档描述或注释成块的代码片段。
- 单行注释:简称行注释,是最常见的注释形式,可以在任何地方使用以
单行注释
对于代码中的变量、常量、函数等对象最好也都加上对应的注释,这样有利于后期对代码进行维护。
// that presents several possibilities for planet salvation.
func enterOrbit() error {
...
}
多行注释
每个包都应该有相关注释,在使用 package 语句之前添加相应的注释,用来对包的功能及作用进行简要说明。
- 在 package 语句之前的注释内容将被默认认为是这个包的文档说明。一个包可以分散在多个文件中,但是只需要对其中一个进行注释说明即可。
// Package superman implements methods for saving the world.
//
// Experience has shown that a small number of procedures can prove
// helpful when attempting to save the world.
package superman
godoc 工具
介绍
- godoc 工具会从包文件中提取顶级声明的首行注释以及每个对象的相关注释,并生成相关文档。
- 也可以作为一个提供在线文档浏览的 web 服务器,Go语言官网(https://golang.google.cn/)就是通过这种形式实现的。
获取
Go语言 1.13 版本移除了 godoc 工具,大家可以通过go get
命令来获取 godoc 工具:
由于防火墙的原因,国内的用户可能无法通过go get golang.org/x/tools/cmd/godoc
go get
命令来获取 godoc 工具,这时候就需要大家来手动下载:
- 首先从 GitHub(https://github.com/golang/tools.git) 下载 golang.org/x/tools 包。
- 将下载得到的文件解压到 GOPATH 下的 src\golang.org\x\tools 目录中,没有的话可以手动创建。
- 打开 GOPATH 下的 src\golang.org\x\tools\cmd\godoc 目录,在该目录下打开命令行工具,并执行
go build
命令,生成 godoc.exe 可执行文件。 - 将生成的 godoc.exe 文件移动到 GOPATH 下的 bin 目录中就可以使用了。(需要把 GOPATH 下的 bin 目录添加到环境变量 Path 中)
使用
godoc 工具一般有以下几种用法:
- go doc package:获取包的文档注释,例如
go doc fmt
会显示使用 godoc 生成的 fmt 包的文档注释。 - go doc package/subpackage:获取子包的文档注释,例如
go doc container/list
。 - go doc package function:获取某个函数在某个包中的文档注释,例如
go doc fmt Printf
会显示有关 fmt.Printf() 的使用说明。
godoc 工具还可以获取 Go 安装目录下 ../go/src 中的注释内容,并将这些注释内容整合到 web 服务器中供我们预览。在命令行输入godoc -http=:6060
,然后使用浏览器打开 http://localhost:6060 后,就可以看到本地文档浏览服务器提供的页面。