Go并发编程实战

Executive Summary

核心观点(金字塔原理)

结论先行: Go语言凭借其原生的Goroutine和Channel并发模型,为开发者提供了简洁高效的并发编程方案,显著降低了并发程序的开发复杂度。

支撑论点:

  1. 语言设计优越:静态类型+脚本化语法,兼顾性能与开发效率
  2. 并发模型原生支持:Goroutine比线程更轻量,Channel提供安全的通信机制
  3. 工程能力完善:跨平台编译、内置工具链、强制代码风格统一

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