01、GO语言程序元素

Go语言程序包含5种符号分别是:

标识符(identifier)、关键字(keyword)、运算符(operator)、分隔符(delimiter)与字面量(literal)

它们是组成Go语言代码和程序的最基本单位,这5种符号共同组成各种表达式和语句

1、标识符

Go 对标识符的命名有严格且简洁的规则,必须遵守,否则编译报错:

  1. 字符组成:只能由 字母(A-Z/a-z)数字(0-9)下划线(_) 组成;
  2. 首字符限制:不能以数字开头(比如 123var 非法,var123 合法);
  3. 大小写敏感Namename 是两个完全不同的标识符;
  4. 不能与关键字重名:比如不能用 ifforfunc 作为标识符;
  5. 长度无限制:但建议简洁且语义化(比如 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 才得 0
0 | 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 语言中,++ 和 -- 是语句,不是表达式,没有运算符优先级之说 。