Go语言 - 并发实践

1.一些并发相关概念

Goroutine协程:

协程:用户态,轻量级线程,栈MB级别

线程:内核态,线程跑多个协程,栈KB级别

使用go func(){}()匿名函数即可启用协程

通过通信共享内存,channel:

make(chan type, cap),分为有缓冲与无缓冲通道

无缓冲通道,即cap为0,要求发送方和接收方的goroutine同时准备好,才能完成发送和接收操作,如果有一个还没准备好,会导致另一个goroutine被阻塞。

有缓冲通道,cap不为0,可以缓解生成消费的压力。

并发安全,Lock,WaitGroup:

使用lock sync.Mutex,调用lock.Lock()和lock.Unlock()保护共享资源

waitgroup计数器开启协程+1,执行结束-1,主线程阻塞直到计数器为0

使用wg sync.WaitGroup,调用wg.Add()添加计数,调用wg.Done()使其-1,调用wg.Wait()进行阻塞

2.依赖管理

框架,日志等可以使用sdk,如何管理sdk?

gopath:bin, pkg, src

依赖的代码放在src文件夹下,但存在依赖版本不一致的问题

govender:存放当前项目的一个依赖副本,解决了多个项目依赖冲突的问题

但存在依赖的几个sdk所依赖的sdk存在冲突

go module:通过go.mod文件管理依赖包版本,go mod指令添加依赖

go.mod描述配置文件

proxy作为中心仓库管理依赖库

本地工具 go get/mod

go.mod中, //indirect表示非直接依赖  //+incompatible表示可能存在不兼容

 proxy会缓存所有依赖的所有版本,实现稳定依赖

go mod init 初始化,创建go.mod

go mod download,下载sdk到本地

go mod tidy,清除不需要依赖,添加需要依赖

3.测试

单元测试,mock测试,基准测试

单元测试:

所有文件都以.go结尾 ,函数命名func TestXxx(*testing.T), 使用m.Run()启用包下所有测试函数

Mock测试:

对于某些不容易构造或者不容易获取的比较复杂的对象,用一个虚拟的对象(Mock 对象)来创建以便测试的测试方法

基准测试:

测试代码性能分析

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值