
1 Go语言 简介
- 多核服务器成为主流,当前编程语言对并发的支持不是很好,不能很好的发挥多核CPU的威力
- 程序规模越来越大、但是编译速度越来越慢
- 现有编程语言设计复杂
Go语言应运而生,即为了解决当下编程语言对并发支持不友好、编译速度慢、编程复杂这三个问题二诞生的。
2 Go语言特性
- 语言组织:语言语法基本概念(标识符、关键字、控制结构等等)
- 类型系统:语言类型(动静)、强弱类型、数据类型、
- 抽象特性:函数、面向对象、多态、接口
- 元编程特性:泛型、反射
- 运行和跨平台语言特性:编译模式、运行模式、内存管理、并发支持、交叉编译、跨平台
- 语言软实力特性:社区、库、框架、规范和兼容性
3 学习新语言
- 两个过程
0. 利用已经掌握的语言,和新语言进行语法对比,梳理差异点,建立知识链接,从而快速的掌握新语言语法
1. 对比新旧语言语法,详细学习新语言的语法特性,语法特性决定了语言的表现力和编程范式,掌握新语言的语言特性是快速学习新语言的一条捷径
4 初识Go程序
hello.go
package main # 定义包名,go程序头部必须有一个包声明语句,GO通过包来管理命名空间
import "fmt" # 引入外部包
func main() { # func关键字声明一个函数,main函数,main代表GO程序入口函数
fmt.Println("Hello, World!") # 调用引入包的Printf函数,函数实参是一个字符串字面量,即打印一句话,注意:必须要双引号
}
go源代码解读
- 源程序以.go为后缀
- 源程序默认UTF8编码
- 标识符区分大小写
- 语句结尾的分号可省略
- 函数以func开头,函数体开头的"{"必须在函数头所在行的尾部,不能单独一行
- 字符串字面量使用双引号括起来
- 调用包里面的方法需要使用"."访问符
- main函数所在的包名必须是main
5 Go语言词法单元
- token
- 标识符
- 操作符
- 字面常量
5.0 token解释
token 是构成源程序的基本不可分割的单元。编译器编译源程序第一步就是将源程序分割成一个个独立的token,这个过程就是词法分析
GO语言的token可以分为关键字、标识符、操作符、分隔符、字面常量等
GO语言编译过程中token怎么分割的呢? 包括操作符、纯分隔符
- 操作符
sum:=a+b
这个简单的语句包含了多个token,操作符就是天然的分隔符,同时自身也是一个token
- 纯分隔符
不具备任何词法含义,只作为其他token的分割功能
空格、制表符、换行符、回车符等
接下来介绍各个类别的token,在介绍token类别之前,先介绍一下标识符
5.1 标识符
编程语言的标识符用来标识变量、类型、常量等语法对象的符号名称,在编译过程中的词法分析时作为一个token存在。
编程语言标识符总体分为两类:1.语言设计者预留的标识符、2.编程者自定义的标识符
用户自定义标识符不应该使用设计者预留的预留标识符,避免产生代码歧义和影响可读性
GO的标识符规则:
- 开头必须字符或下划线后面跟任意多个字符、数字、下划线、并且区分大小写
- 避开预留标识符名称
GO标识符类型包括
- 关键字
- 内置数据类型标识符
- 内置函数
- 空白标识符
语言设计者预留标识符
关键字:这些预留标识符一般用来控制程序结构,每个关键字都代表不同语义的语法糖
- 引导程序结构关键字
- 声明复合数据结构关键字
- 控制程序结构关键字
内置数据类型标识符:内置预声明数据类型标识符
GO作为一种强类型静态编译语言,在定义常量和变量时,需要显式的指出数据类型
内置函数:内置函数作为高级语言的语法糖
常量值标识符:true、false、iota、nil
空白标识符:_ ,用来声明一个匿名的变量,通常被用作展位,比如忽略函数多个返回值中的一个和强制编译器做类型检查
5.2 操作符
操作符就是语言所使用的符号集合,包括运算符、显式的分隔符、以及其他语言辅助符号,自身就作为一个token,具备词法含有,同时自身也是分割其他token的分隔符。纯分隔符仅仅起到分隔token的功能:空格、制表符、回车、换行
- 算数分隔符
- 位运算符
- 赋值和赋值复核运算符
- 比较运算符
- 括号
- 逻辑运算符
- 自增、自减操作符
- 其他 : , ; . ... <-
5.3 字面常量
编程语言源程序中标识固定值的符号叫做字面常量,简称字面量。
字面量可以出现在两个位置:一是用域常量和变量的初始化,二是用在表达式里或者函数调用的实参
- 整型字面量
- 浮点型字面量
- 复数类型字面量
- 字符型字面量
- 字符串字面量
篇0总结
GO源程序基本构成
- 关键字引导程序的基本结构
- 内置类型标识符辅助 声明变量和常量
- 字面量辅助变量和常量的初始化
- 分隔符帮助GO编译器识别各个token
- 操作符和变量、关键字一起构成丰富的词法单元
----------------推荐关注----------------