Go语言入门——工程实践
1.语言进阶
从并发编程的视角待大家了解Go高性能的本质。 01.并发VS并行 1:多线程程序在一个核的cpu上运行 2:多线程程序在多个核的cpu上运行 Go可以充分发挥多核优势,高效运行
1.1 Goroutine
协程——协程——协程——协程 用户态 线程——线程 内核态 协程:用户态,轻量级线程,栈KB级别 线程:内核态,线程跑多个协程,栈MB级别
1.2 CSP (Communicating Sequential Processes)
通道——通过通信共享内存 临界区——通过共享内存实现通信
提倡通过通信共享内存而不是通过共享内存而实现通信
1.3 Channel
make(chan元素类型,[缓冲大小])
无缓冲通道 make(chan int)
有缓冲通道 make(chan int,2)
A子协程发送0~9数字
B子协程计算输入数字的平方
主协程输出最后的平方数
1.4并发安全Lock
对变量执行2000次+1操作,5个协程并发执行
1.5 WaitGroup
计数器 开启协程+1;执行结束-1;主协程阻塞直到计数器为0。
2.背景
单体函数 复杂项目 ●工程项目不可能基于标准库0~1编码搭建 ●管理依赖库
依赖管理 了解GO语言依賴管理的演进路线。
2.1 Go 依赖管理演进
●不同环境(项目)依赖的版本不同 ●控制依赖库的版本
2.1.1 GOPATH
V环境变量$GOPATH v项目代码直接依赖src下的代码 Vgoget下载最新版本的包到src目录下
2.1.1 GOPATH-弊端
场景: A和B依赖于某- -package的不同版本。 问题:无法实现package的多 版本控制
2.1.2 Go Vendor
●项目目录下增加vendor文件,所有依赖包副本形式放在$ProjectRoot/vendor ●依赖寻址方式: vendor => GOPATH 通过每个项目引入一份依赖的副本, 解决了多个项目需要同一个package 依赖的冲突问题。