今天的笔记主要内容有:Go语言进阶知识、依赖管理、测试。
Go并发
一、并发 VS 并行
1.并发:多线程程序在一个核的CPU上运行,通过时间片的切换实现
2.并行:多线程程序在多个核的CPU上运行,可以理解为实现并发的一个手段
二、协程 Goroutine
Go 语言支持并发,我们只需要通过 go 关键字来开启 goroutine 即可。
goroutine 是轻量级线程,goroutine 的调度是由 Golang 运行时进行管理的。
用户态,栈KB级别
协程的使用:快速打印hello goroutine
func hello(i int){
println("hello goroutine:" + fmt.Sprint(i))
}
func HelloGoRoutine(){
for i := 0; i < 5; i++ {
go func(j int){
hello(j)
}(i)
}
time.Sleep(time.Second)
}
运行结果:
三、Channel
通道(channel)是用来传递数据的一个数据结构。
通道可用于两个 goroutine 之间通过传递一个指定类型的值来同步运行和通讯。操作符 <- 用于指定通道的方向,发送或接收。如果未指定方向,则为双向通道。
// 无缓冲通道
src := make(chan int)
// 有缓冲通道
dest := make(chan int, 3)
四、WaitGroup
提供三个方法
// 计数器+delta
Add(delta int)
// 计算器-1
Done()
// 阻塞知道计数器为0
Wait()
依赖管理
依赖管理(Dependency Management)是指对我们无法控制的库、包和依赖所组成的依赖关系网络进行管理。 依赖管理被认为是软件工程中最不被理解和最具挑战性的问题之一。
一、3个阶段
- 不同环境(项目)依赖的版本不同
- 控制依赖库的版本
1. GOPATH
环境变量$GOPATH
项目依赖直接依赖src下的代码
2. Go Vendor
项目目录下增加vendor文件
3. Go Module
通过go.mod文件管理依赖包版本
二、工具
1.go get
2.go mod
测试
软件测试是通过考虑软件的所有属性(可靠性,可伸缩性,可移植性,可重用性,可用性)和评估软件组件的执行来查找软件错误或缺陷来识别软件正确性的过程。
一、单元测试
规则:
1)所有测试文件以_test.go结尾
2)测试函数命名规范 func TestXxx(*testing.T)
3)初始化逻辑放到TestMain中
Tips:
二、Mock测试
定义:mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便测试的测试方法。
快速Mock函数:
- 为一个函数打桩;
- 为一个方法打桩
三、基准测试
定义:基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。
- 优化代码,需要对当前代码分析;
- 内置的测试框架提供了基准测试的能力
总结
Go语言学习打卡第二天,边听课边整理笔记,听完课也动手敲了代码,欢迎同学们阅读。
如果理解有误也欢迎同学们指出,我会不断完善Go基础知识,共同进步!