go程序设计语言 | 面向模式的软件架构-模式系统
go
what
- 高性能,高并发
 - 语法简单,学习曲线平缓
 - 丰富的标准库
 - 完善的工具链
 - 静态链接
 - 快速编译
 - 跨平台
 - 垃圾回收
 
应用-公司
- 字节,腾讯,美团,滴滴,百度,谷歌。Facebook。七牛云,bili, pingcap
 
字节why - go
- 最初python,性能问题换成了go
 - C++不适合在线Web业务
 - 早期团队非Java背景
 - 部署简单,学习成本低
 - 内部RPC和HTTP框架的推广
开发环境
 - golang安装
 - 配置集成开发环境
 - 基于云的开发环境
 
语言基础语法
进阶
CSP - communicating sequential processes
- 通过通信共享内存
 - 通过共享内存实现通信
 - 提倡通过“通信共享内存”而不是通过共享内存而实现通信
 
channel
- make(chan元素类型,[缓冲大小])
 - 无缓冲通道 - make(chan int)
 - 有缓冲通道 - make(chan int,2)
 
并发安全lock
WaitGroup
依赖管理
GOPATH
- 场景:A和B依赖于某一package的不同版本
 - 问题:无法实现package的多版本控制
 
Go Vendor
- 项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor
 - 依赖寻址方式: vendor=>gopath
 - 通过每个项目引入一份依赖的副本,解决了多个项目需要同一个package依赖冲突问题
 - 无法控制依赖的版本
 - 更新项目又可能出现依赖冲突,导致编译出错