1.16课程笔记Go语言进阶与依赖管理| 青训营笔记day2

76 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2天学习内容主要有四个部分:go的语言进阶 依赖管理 测试 项目实战。根据课程划分,本篇笔记主要记录前两个部分:Go语言进阶与依赖管理。

Go语言进阶

并发:多线程程序在一个核的cpu上运行
并行:多线程程序在多个核的cpu上运行
Go可以充分发挥多核优势,高效运行。
Go语言有高并发的特点,通过协程实现。

Goroutine

协程:用户态,轻量级线程,栈MB级别
线程:内核态,线程跑多个协程,栈KB级别
协程的调度由Go语言本身实现,Go语言一次可创建上万个协程
使用协程的实例:快速打印hello goroutine :0-hello goroutine :4
要实现快速要求使用多个协程同时打印
开启协程:调用函数时,在函数前加上go关键字

CSP(Communicating Sequential Processes)

协程的通信
提倡通信共享内存而不是通过内存共享实现通信

channel

通道分为:无缓冲通道和有缓冲通道
make(chan 元素类型,[缓冲大小])
有缓冲通道也是一个典型的生产消费模型

并发安全Lock

数据竞态问题:存在多个gorountine同时操作一个内存(临界区)的情况
通过加锁保证并发安全

WaitGroup

三个部分:Add(delta int) Done() Wait()
实现优化

依赖管理

依赖:各种开发包,使用封装好的/已验证的开发组件/工具
在复杂项目开发时,关注业务逻辑,所以使用管理依赖库

Go依赖管理演进

GOPATH→Go Vendor→Go Module
不同环境(项目)依赖的版本不同
控制依赖库的版本

GOPATH

项目代码直接依赖scr下的代码
go get下载最新版本的安装包到scr目录下
弊端:无法实现package的多版本控制

Go Vendor

项目目录下增加wendor文件,所有依赖包副本放在文件中
解决了多个项目需要同一个package依赖的冲突问题
弊端:无法控制依赖的版本;更新可能出现依赖冲突,导致编译错误

Go Module

通过go.mod文件管理依赖包版本 达到目标:定义版本规则和管理项目依赖关系