Go语言进阶与依赖管理-学习笔记

1 语言进阶

1.1 Goroutine

线程:内核态,栈MB级别

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

1.2 CSP模型

        提倡通信实现共享内存

 1.3 Channel

创建方法

        make(chan 元素类型,缓冲区大小)

        无缓冲通道:make(chan int);有缓冲通道:make(chan int,2)

示例:

 1.4 并发安全

 1.5 WaitGroup

原理为计数器,统计协程数

Add(int)表示启动了几个协程,每个协程结束调用Done(),主协程Wait()等待所有协程结束再推出。

示例:

2 依赖管理

2.1 Go依赖管理演进

        GOPATH -> Go Vendor -> Go Module

        如今主流是go mod

2.1.1 GOPATH

目录结构:

        项目代码直接依赖src文件夹的代码,go get下载最新版本的包到src目录下。

        缺点为无法实现package的多版本控制

2.1.2 Go Vendor

        项目目录下增加了vendor文件,存放依赖包副本。依赖寻址先从vendor开始寻找,然后再找GOPATH

        缺点是无法控制依赖的版本

2.1.3 Go Module

        通过go.mod文件管理依赖包版本,通过go get和go mod管理依赖包

2.2 依赖管理三要素

  1. 配置文件,描述依赖(go.mod)
  2. 中心仓库管理依赖库(Proxy)
  3. 本地工具(go get/mod)

2.3 依赖配置

2.3.1 go.mod

 2.3.2 version

语义化版本:${MAJOR}.${MINOR}.${PATCH}

基于commit伪版本

2.3.3 indirect

        表示间接依赖,如A直接依赖B,B直接依赖C,那么A间接依赖C。

2.3.4 incompatible

        表示可能不兼容

2.3.5 依赖图

        选择最低兼容版本

2.3.6 依赖分发-回源

        从代码托管平台依赖,造成一系列问题

2.3.7 依赖分发-Proxy

 2.3.6 依赖分发-变量GOPROXY

        从第一个网址开始寻找,直到源站

2.3.7 工具-go get

 2.3.8 工具-go mod

 2.3.9

3 测试

3.1 单元测试

 3.1.1 规则

 3.1.2 例子

3.1.3 运行

 3.1.4 assert

 3.1.5 覆盖率

         由于三行代码只执行了两行代码,所以覆盖率为66.7%

        一般覆盖率在50%~60%,金融相关需要在80%以上。

3.2 Mock测试

导入monkey包

主要思想是打桩,不改变原变量

示例:

3.3 基准测试

4 项目实战

根据帖子id查询到帖子内容及相关评论

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SwithunH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值