这是我参与【第五届青训营】伴学笔记创作活动的第七天
本次课程需要:
- 理解规则引擎的组成部分及应用场景
- 理解规则引擎的核心原理-编译原理的相关概念
- 设计并实现一个规则引擎-YoungEngine
- 结合之前所学课程,实现Web版规则引擎
希望通过通信共享内存,而非通过共享内存而实现通信。
【通过通信共享内存】
在以上例子中:A与B为子协程,其与生产者消费者问题相似,A的生产速度需要和B协调,进程才能高效。 若通道带缓冲,可以尽可能解决生产消费速率不平等的问题,增加执行效率。 其中“defer close”为延迟的自行关闭。
【通过共享内存而实现通信】
以上通过加锁与不加锁说明了不加锁将会出现并发安全问题。
Go 依赖管理介绍 依赖就是各种开发包(他人已经封装好的组件等)。因为工程项目不可能基于标准库0~1编码搭建。
GOPATH:
go语言支持的环境变量,是go项目的工作区。有三个重要的点
GOPATH弊端:A和B同时依赖于某一package的不同版本。就会出现问题:无法实现package的多版本控制。
为解决以上问题,出现Go Vendor 项目目录下增加vendor文件,所有依赖包副副本形式放在$ProjectRoot/vendor
通过每个项目引入一份依赖的副本,解决多个项目需要同一个package依赖的冲突问题。
但是 如果在第二层继续依赖,vendor还是不能解决,所以产生Go Module
通过go.mod文件管理依赖包版本,再通过go get/go mod指令工具管理依赖包
最终目标:定义版本规则和管理依赖关系
module example/project/app 是一个模块路径,主要标识这个模块 写出来可以从哪里找到这个模块。
MAJOR:属于一个大版本。可以认为是不兼容的,代码隔离的
MINOR:新增一些函数、功能。需保持在MAJOR下做到函数兼容
PATCH:做一些代码上的修复
go咱选择版本时会选择最低的兼容版本
依赖一般去哪里下载?:
- Github
- SVN
- ...
但是如果直接在第三方平台(如:github上下载的话)
- 无法保证构建的稳定性
- 无法保证依赖的可用性(github上的作者可能会删除)
- 增加第三方的压力
出现依赖分发—Proxy
工具-go mod
3.测试
回归测试:质量保证手动通过终端回归一些固定的主流场景,比如刷一下抖音看评论有没有问题
集成测试:对系统功能维度做测试验证。对服务暴露的某个接口进行自动化的回归测试。会集成一个功能维度
单元测试:面对测试开发阶段,开发者对单独的函数模块进行功能验证
func TestXxx(*testing.T)本名字一定要命名规范,不然在编译器里可能会不能运行
单元测试-覆盖率
单元测试-Mock
基准测试
- 优化代码,需要对当前代码分析
- 内置的测试框架提供基准测试能力
基准测试以BenchmarkSelect(b *testing.B)开头
基准测试优化