01、GO语言程序元素
Go语言程序包含5种符号分别是:
标识符(identifier)、关键字(keyword)、运算符(operator)、分隔符(delimiter)与字面量(literal)
它们是组成Go语言代码和程序的最基本单位,这5种符号共同组成各种表达式和语句
1、标识符
Go 对标识符的命名有严格且简洁的规则,必须遵守,否则编译报错:
- 字符组成:只能由 字母(A-Z/a-z)、数字(0-9)、下划线(_) 组成;
- 首字符限制:不能以数字开头(比如
123var非法,var123合法); - 大小写敏感:
Name和name是两个完全不同的标识符; - 不能与关键字重名:比如不能用
if、for、func作为标识符; - 长度无限制:但建议简洁且语义化(比如
userAge而非u_a)。
预定义标识符
Go 语言源代码中声明如下
数值(16个):
整数(12个):
byte、int、int8、int16、int32、int64
uint、unint8、uint16、uint32、uint64、uintptr
浮点型(2个):
float32、float64
复数型(2个):
complex64、complex128
字符和字符串型(2个):
string、rune
接口型(1个):
error
布尔型(1个):
bool(true 和 false )
内建函数表:
基础操作:len()、cap()、make()、new()、append()
类型转换:int()、float64()、bool() 等(类型转换本质是内置函数)
并发相关:go()、close()、chan()
内存 / 指针:copy()、delete()、panic()、recover()
其他标识符: iota 、nil 、_。
最后一个叫作空标识符,若存在一个没有使用的变量 a,那么编译时会报错,因为 Go 语言要求存在实体必须使用,所以可以加一句_=a 这样的代码,这样 Go 语言编译器会认为使用了 a 变量 ,也就不会报错了, 而实际上并没有对变量 a 做任何操作 。程序初始化后空标识符就会被释放 。
2、关键字
Go 语言作为一 门静态编译型语言,它的关键字一共有 25 个,相比其他编程语言而言显得非常少,因此某种意义上也就更简单了 。 下面是 Go 语言 的 25 个关键字 。
引导程序整体结构的8个关键字:
package //定义包名
import //导入包名
const //常量声明
var //变量声明
func //函数定义
defer //延迟执行
go //并发语法糖
return //函数返回
声明复合数据结构的4个关键字:
struct //定义结构类型
interface //定义接口类型
map //声明或创建map类型
chan //声明或创建通道类型
控制程序结构的13个关键字:
if else //ifelse语句
for range break continue //for循环使用
switch select type case default fallthrough //switch和 select语句使用
goto //goto跳转语句
上面显示的Go语言关键字,GO的保留字,这些保留字不能用作常量、变量或任何其他标识符名称。除此之外,还有一个比较特殊的类型叫作空接口,它的字面量是“_”(下划线)
3、字面量
字面量就是表示值的一种标记法,简单来说,它会被用来构造类型
Struct(结构体)、Array(数组)、Slice(切片)和 Map(字典)的值。
//举一个通俗的例子,以Go语言为例:
const b int = 10 // b为常量,10为字面量
var str string="hello world" // str 为变量,hello world 为字面量
4、分隔符
分隔其他元素
例如fmt.Println(“Hello,World!")中包含了6个标记 :
fmt
.
Println
.
(
"Hello, World!"
)
程序中使用的括号分隔符包括括号、中括号和大括号。程序中使用的标点分隔符包括小数点、逗号、分号、冒号和省略号。
如果将多个语句写在同 一行,它们就必须使用;分隔,实际开发中不鼓励这种写法。
5、运算符
运算符是用于执行运算或逻辑操作的符号,如下:
| 运算符 | 说明 |
|---|---|
| || | 或,二元逻辑运算符,例如 true||false返回的结果就是 true |
| && | 与,二元逻辑运算符,例如 true&&false返回的结果就是 false |
| ! | 非,一元逻辑运算符,例如 !a 返回 true( a的值为 false ) |
| == | 相等判断,二元逻辑运算符,例如 "string”=="string" 返回的结果是 true |
| != | 不等判断,二元逻辑运算符,例如 "string”!="String 返回的结果是 true |
| < | 小于判断,二元逻辑运算符,例如 1<2 返回的结果是 true |
| <= | 小于等于判断,二元逻辑运算符,例如 2<=2 返回的结果是 true |
| > | 大于判断,二元逻辑运算符,例如 2>1 返回的结果是 true |
| >= | 大于等于判断,二元逻辑运算符,例如 2>=2 返回的结果是 true |
| + | 求和操作,二元算术运算符,例如 1+1 返回 2 |
| - | 求差操作,二元算术运算符,例如 1-1 返回 0 |
| * | 乘积操作,二元算术运算符,例如 2*3 返回 6 。同时也是一元地址运算符,表示取值操作 |
| / | 求商操作,二元算术运算符,例如 6/3 返回 2 |
| | | 按位或操作,二元算术运算符,例如 5|11 返回 15 规则:两位只要有一个是 1,结果该位就是 1;全 0 才得 00 | 0 = 0 0 | 1 = 1 1 | 0 = 1 1 | 1 = 1 |
| ^ | 按位异或操作,二元算术运算符,例如 5^11返回 14。 同时也是一元运算运算符,表示按位取补码操作,例如 ^5 返回 -6 规则:相同为 0,不同为 1 1 ^ 1 = 0 0 ^ 0 = 0 1 ^ 0 = 1 0 ^ 1 = 1 |
| % | 求余操作,二元算术运算符,例如 12%5 返回 2 |
| << | 按位左移操作,二元算术运算符,乘2ⁿ 例如 4<<2 =4*2²返回 16 |
| >> | 按位右移操作,二元算术运算符,除2ⁿ 例如4 >> 2 =4÷2²返回 1 |
| & | 按位与操作和按位或|是反的,二元算术运算符,例如 5&11 返回 1。同时也是一元地址运算符,表示取址操作,例如&str返回str所在的内存地址 规则:全 1 才为 1,否则 0 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 |
| &^ | 按位清除操作,二元算术运算符,例如 5&^11 返回 4 |
| &^= | 按位置清零赋值运算符,等价于 a = a &^ b |
当一个表达式中有多个运算符时,就会遇到优先级的问题,在Go语言中,一元运算符的优先级高于二元运算符,优先级如下:
| 运算符 | 优先级 |
|---|---|
| * / % << >> & &^ | 最高 |
| + - | ^ | 较高 |
| == != < <= > >= | 中 |
| && | 较低 |
| || | 最低 |
在 Go 语言中,++ 和 -- 是语句,不是表达式,没有运算符优先级之说 。