这是我参与「第五届青训营 」笔记创作活动的第2天,以下为我总结整理第二天的一些自我经验以及一些操作手顺,希望能在帮助自我学习的同时,也能为他人参考,谢谢。
语言进阶(GO并发编程)
首先提到了协程这一概念,是一种轻量级的方法,由于协程的计算单位是KB级的,在数据的传输上属于消耗比较小的轻量级的,多用于用户端使用,因为用户端资源有限,需要服务器的处理结果之后,再给用户端使用。
然后又讲了线程这一名词(曾经在课本以及工作中运用过),对于系统来说是一种较为昂贵的资源,对于一个单独的系统来说,线程的创建、切换、停止都是属于较大的操作,计算单位是MB级别的
1.通过Goroutine的举例来说明协程的使用方法
创建协程的方法:go.func()
2.协程之间的通信是通过通信共享内存,相比于通过内存共享通信,前者更符合轻量级的使用。而通信是通过通道Channel实现的
Channel的具体操作分为两种:无缓冲通道和有缓冲通道
3.使用WaitGroup来实现协程的并发
WaitGroup的三种实现并发的同步方法:Add()、Done()、Wait()
依赖管理
我们在开发的过程中肯定不可能所有的功能实现都是用基本库来进行编码的,因为如果只使用基本库,很多功能的实现代码量巨大且迭代的冗余也会很大,所以除了原生的SDk库,还有更多封装好的库可供使用,以便有更多的精力关注开发逻辑的实现以及完善程度。
一般文件后缀的含义:.bin-二进制文件、.pkg-包文件用来加速编译、.src-源码SourceCode
依赖管理不同方法的优缺点
GOPATH弊端:无法实现package的多版本控制
Go Vender:将每个项目的依赖副本存到vender文件夹,能够解决上面的问题,但无法解决版本间的依赖冲突问题。
Go Module:通过go.mod文件管理依赖版本,通过go get/go mod指令工具管理依赖包
依赖管理三要素:配置文件(描述依赖)、中心仓库管理依赖库(Proxy)、本地工具(go mod)
测试部分
测试是发版的最后一道防火墙。
主要的测试方法有三种,这三种都是每次发版前必须层层筛选测试的
回归测试:测试需求的功能
集成测试:包括自动化测试,功能测试
单元测试:代码的逻辑回归,各种函数模块的校对
覆盖率的概念:代码是否走了这个分支
覆盖率越高,测试后发版的bug流出率越低。要求测试单元的粒度小。
Mock函数-打桩:Patch(target,replacement interface{})/Unpatch(target interface{})
项目实战
分层结构:
数据层-外部数据的增删改查
逻辑层-处理核心业务逻辑输出
视图层-处理和外部的交互逻辑
前提是需要搭建一个go web框架
在两个流程不相互依赖的情况下就可以进行并行任务处理