这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记
01并发 VS 并行
并发是通过时间片的切换实现多线程。
并行是通过多核CPU的实现并行。
1.1Goroutine
线程属于内核态,切换需要占用的资源大
协程属于用户态,更加轻量级
使用go+函数创建一个协程
1.2CSP
1.3Channel
无缓冲通道就是同步通道
package main
func main() {
src := make(chan int)
dest := make(chan int, 3)
go func() {
defer close(src)
for i := 0; i < 10; i++ {
src <- i
}
}()
go func() {
for i := range src {
dest <- i * i
}
}()
for i := range dest {
println(i)
}
}
通过chan实现通信
1.4 并发安全
避免对共享内存的非并发安全的操作
1.5WairGroup
实例:
02依赖管理
2.1Go依赖管理演进
2.1.1 GOPATH
存在弊端,无法实现多个版本控制
2.1.2Go Vender
存在弊端:无法控制以来的版本
2.1.3Go Moule
2.2依赖管理三要素(类比java中的maven)
2.3.1 依赖配置 go.mod
require描述单元依赖