Go语言项目实践学习 | 青训营笔记

54 阅读3分钟

这是我参与「第五届青训营 」笔记创作活动的第2天,今天主要学习了Go语言开发项目的流程以及实践中需要注意的问题。

01并发-并行

Go可以充分发挥多核优势,高效运行。

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

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

Go语言一次可以创建上万个协程。

1.1 Goroutine

创建协程。

1.2 CSP (Communication Sequential Processes)

Go提倡通过通信共享内存而不是通过共享内存而实现通信

1.3 Channel

make(chan 元素类型,[] )

无缓冲通道 make(chan int)

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

1.4 并发安全 Lock

并发安全有一定概率影响结果。

1.5 Wait Group

Sync包下的Wait Group实现并发任务同步。

02 依赖管理

学会站在巨人的肩膀上。

2.1依赖管理演进

1)GOPATH

问题:无法实现package的多版本控制。

2)Go Vendor

解决了多个项目需要同一个package依赖的冲突问题。

弊端:无法控制依赖的版本。更新项目又可能出现以来冲突,导致编译出错。

3)Go Module

定义版本规则和管理项目依赖关系。

2.2 依赖管理三要素

1.配置文献,描述依赖。 go.mod

2.中心仓库管理依赖库。Proxy

3.本地工具。go get/mod

2.3 go.mod

2.3.1依赖配置 - go.mod

2.3.2 依赖配置 - version

语义化版本

基于commit伪版本

2.3.3 依赖配置- indirect

A->B->C

A->B直接依赖

A->C间接依赖

2.3.4 依赖配置- imcompatible

主版本2+模块会在模块路径增加/vN后缀。

对于没有go.mod文件并且主版本2+的依赖,会+incompatible

2.3.4 依赖配置-依赖图

2.3.5 依赖分发-回源

无法保证构建稳定性

无法保证依赖可用性

增加第三方压力

依赖分发 -Proxy

稳定+可靠

2.3.6 依赖分发 - 变量 GOPROXY

2.3.7 - go get

2.3.8 - go mod

1)init 初始化,创建go.mod文件

download 下载模块到本地缓存

tidy 增加需要的依赖,删除不需要的依赖

2)依赖管理三要素

1.配置文件,描述依赖 go.mod

2.中心仓库管理依赖库 Proxy

3.本地工具 go get/mod

03测试

1)回归测试

2)集成测试

3)单元测试

测试单元的输出和期望进行校对,

规则

所有测试文件以_test.go结尾

func TestXxx(*testing.T)

初始化逻辑放到TestMain中

覆盖率

一般覆盖率:50%~60%,较高覆盖率80%。

测试分支相互独立,全面覆盖。

测试单元粒度足够小,函数单一职责。

外部依赖=》稳定&幂等

文件处理-Mock

基准测试

04项目实践

过程

需求描述

项目拆解

代码设计

测试运行

day2总结

课程的节奏还是很快的。今天的课程主要讲解了实践中项目需要注意的问题,Go语言特性对项目的中的运用,项目测试的重要性及常用方法,项目实践的四个步骤。Go语言多协程的特性保证了项目的高效性;对依赖管理了解熟悉了Go语言对项目逐渐完善的过程,形成了Go Module的管理关系;实际开发中测试是必不可少的,集中讲解了测试的常用方法;最终拆解了掘金一般文章项目的整个需求,并对其分析了整个项目实践的过程。今天的课程主要是对项目方面的讲解,对Go语言实践开发有很大帮助。