Go并发编程实战
Executive Summary
核心观点(金字塔原理)
结论先行: Go语言凭借其原生的Goroutine和Channel并发模型,为开发者提供了简洁高效的并发编程方案,显著降低了并发程序的开发复杂度。
支撑论点:
- 语言设计优越:静态类型+脚本化语法,兼顾性能与开发效率
- 并发模型原生支持:Goroutine比线程更轻量,Channel提供安全的通信机制
- 工程能力完善:跨平台编译、内置工具链、强制代码风格统一
SWOT 分析
| 维度 | 分析 |
|---|---|
| S 优势 | 原生并发模型简单易用、编译运行速度快、标准库丰富、跨平台无需移植代码 |
| W 劣势 | 分布式计算成熟度不及Erlang、运行速度不及C、第三方库相对较少、垃圾回收会造成短暂停顿 |
| O 机会 | 多核CPU时代对并发编程需求增加,Go的并发模型恰好满足这一趋势 |
| T 威胁 | 并发模型存在一些”坑”需要开发者注意,GC停顿对实时性要求高的场景有影响 |
适用场景
- 需要高并发处理的后端服务开发
- 对开发效率和运行性能都有要求的项目
- 跨平台部署的应用程序开发
第一部分 Go语言的世界
第1章 初识Go语言
- Go语言特性
- 开源
- 静态类型,语法趋于校本化
- 卓越的跨平台无需移植代码
- 垃圾回收
- 原生并发模型Goroutine, Channel
- 函数式编程范式
- 无继承层次的轻量级面向对象编程范式,采用完全非侵入式的接口。避免了继承的复杂问题,层次更简洁。
- 内含完善全面的软件工程工具。
- 代码风格强制统一。。。。
- 程序编译和运行速度都非常快
- 标准库丰富
- Go的优缺点
- 相比C/C++,Go拥有清晰的依赖管理和全自动垃圾回收机制,因此代码量大大降低,开发效率大大提高
- 相比java,有简明的类型系统,函数式编程范式先进的并发编程模型,因此代码更小更简洁可重用性更高,并在多核计算环境下更快运行
- 相比PHP,Go具有通用性和规范性,适合构建大型软件,性能方面远远超越PHP
- 缺点
- 目前在分布式计算方面,Go的成熟度不及Erlang
- 运行速度不及C,跟Java不相上下
- 第三方库不及其他主流语言,Go还很年轻并在不断增长中
- 语法方面,语法糖不多
- 并发模型强大,但有些“坑”
- 垃圾回收采用”并发标记清除算法ConcurrentMarkAndSweep CMS”,回收垃圾期间会停止所有用户程序操作,对实时性要求比较高的有影响
第2章 Go语言环境搭建
- 工作区结构
- src目录源码
- pkg目录存放经由go install命令构建安装后的代码包.a归档
- bin目录与pkg类似由Go命令生成可执行文件.exe后缀
- 注意命令文件和源码文件的区别:命令文件就是声明属于main代码包,并包含无参数声明和结果声明的main函数的源码文件这里源码可独立运行(go run 命令),也可被go build或go install命令转换为可执行文件。而源码文件则是指存在于某个代码包中的普通源码文件。
- 需要将工作区的目录路径添加到环境变量GOPATH中
- go命令
第2部分 编程基础
第3章 词法与数据类型
- 基本词法
- p35