Go语言入门——工程实践1| 青训营

65 阅读1分钟

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 依赖的冲突问题。

2.1.2 Go Vendor-弊端

2.1.3 Go Module