Go语言进阶与依赖管理2.0 | 青训营笔记

67 阅读3分钟

这是我参与【第五届青训营】伴学笔记创作活动的第七天

本次课程需要:

  1. 理解规则引擎的组成部分及应用场景
  2. 理解规则引擎的核心原理-编译原理的相关概念
  3. 设计并实现一个规则引擎-YoungEngine
  4. 结合之前所学课程,实现Web版规则引擎

image.png 希望通过通信共享内存,而非通过共享内存而实现通信。

【通过通信共享内存】

image.png

在以上例子中:A与B为子协程,其与生产者消费者问题相似,A的生产速度需要和B协调,进程才能高效。 若通道带缓冲,可以尽可能解决生产消费速率不平等的问题,增加执行效率。 其中“defer close”为延迟的自行关闭。

【通过共享内存而实现通信】

image.png

以上通过加锁与不加锁说明了不加锁将会出现并发安全问题。

Go 依赖管理介绍 依赖就是各种开发包(他人已经封装好的组件等)。因为工程项目不可能基于标准库0~1编码搭建。

image.png GOPATH: go语言支持的环境变量,是go项目的工作区。有三个重要的点

image.png

GOPATH弊端:A和B同时依赖于某一package的不同版本。就会出现问题:无法实现package的多版本控制。

image.png

为解决以上问题,出现Go Vendor 项目目录下增加vendor文件,所有依赖包副副本形式放在$ProjectRoot/vendor

通过每个项目引入一份依赖的副本,解决多个项目需要同一个package依赖的冲突问题。

但是 如果在第二层继续依赖,vendor还是不能解决,所以产生Go Module

通过go.mod文件管理依赖包版本,再通过go get/go mod指令工具管理依赖包

最终目标:定义版本规则和管理依赖关系

image.png

image.png module example/project/app 是一个模块路径,主要标识这个模块 写出来可以从哪里找到这个模块。

image.png

MAJOR:属于一个大版本。可以认为是不兼容的,代码隔离的

MINOR:新增一些函数、功能。需保持在MAJOR下做到函数兼容

PATCH:做一些代码上的修复

image.png

go咱选择版本时会选择最低的兼容版本

image.png

依赖一般去哪里下载?:

  • Github
  • SVN
  • ...

但是如果直接在第三方平台(如:github上下载的话)

  1. 无法保证构建的稳定性
  2. 无法保证依赖的可用性(github上的作者可能会删除)
  3. 增加第三方的压力

出现依赖分发—Proxy

image.png

image.png

工具-go mod

image.png

image.png

3.测试

回归测试:质量保证手动通过终端回归一些固定的主流场景,比如刷一下抖音看评论有没有问题

集成测试:对系统功能维度做测试验证。对服务暴露的某个接口进行自动化的回归测试。会集成一个功能维度

单元测试:面对测试开发阶段,开发者对单独的函数模块进行功能验证

image.png

image.png func TestXxx(*testing.T)本名字一定要命名规范,不然在编译器里可能会不能运行

image.png

单元测试-覆盖率

image.png

image.png

image.png

image.png

image.png

单元测试-Mock

基准测试

  • 优化代码,需要对当前代码分析
  • 内置的测试框架提供基准测试能力

基准测试以BenchmarkSelect(b *testing.B)开头

基准测试优化

image.png

image.png