后端基础| 青训营笔记

63 阅读3分钟

这是我参与「第五届青训营」伴学笔记创作活动的第 2 天。

首先就是并发编程的视角带我们了解了Go高性能的本质:Go能够充分发挥多核优势,高放运行,然后介绍了线程和协程,以及他们之间的区别,这里面线程属于用户态,轻量级线程,栈属于MB级别。而协程属于内核态,一个线程可以跑多个协程,然后栈是属于KB级别的。
接着就是讲述了Go是提倡通过通信共享内存而不是通过共享内存实现通信,Go语言两种方式都有相应实现的方法。后面则是通过一个实例:计算平方数来向我们展示了有缓冲通道和无缓冲通道的性能差异。最后就是并发安全Lock,通过sync相关关键字,实现并发安全操作和协程之间的同步。
第二个部分则是Go语言的依赖管理,介绍了从GOPATH-->Go Vendor-->Go Module 。整个演进路线主要是围绕不同环境(项目)依赖的版本不同以及控制依赖库的版本这两个目标来迭代发展的。接着介绍了GOPATH的结构,GOPATH是Go语言支持的一个环境变量,value是GO项目的工作区。目录有以下结构:

  1. bin:存放Go项目编译生成的二进制文件。
  2. pkg:存放编译的中间产物,加快编译速度。
  3. src:存放Go项目的源码。

接着便是讲述了各个依赖管理的弊端,GOPATH是无法解决多个项目依赖同一个库,则不同项目不能够依赖同一个库的不同版本。接着Go Vendor就是在当前项目的一个目录中存放了依赖的副本,会优先使用该目录下的依赖,如果依赖不存在再考虑再GOPATH中去找。但是Go Vendor无法好很好解决依赖包的版本变动问题以及一个项目依赖同一个包的不同版本的问题。所以Go Module出现了,通过go.mod文件管理依赖包版本,然后通过goget/gomod指令工具管理依赖包。
依赖管理的三要素为:配置文件(go.mod),中心仓库管理依赖库(Proxy)以及本地工具(go get/mod)。
接着就是讲述了关于依赖的相关知识,包括有依赖配置version,indirect,incompatible.
依赖分发回源,Proxy,GOPROXY。工具to get,go mod。
然后就是有关单元测试的相关内容,包括有单元测试、Mock测试以及基准测试。通过事故使得我们意识到测试的重要性。单元测试主要包括有输入、测试单元、输出以及校对,单元则包括接口,函数,模块等。最后校对是保证代码的功能与我们的预期相符。后面则是通过一些举例介绍了单元测试的运行,assert,覆盖率,依赖,文件管理以及Mock。
接着就是基准测试,基准测试是指测试一段程序的运行性能以及耗费CPU的程度,即对代码做性能分析。主要用来优化代码,对当前代码进行分析,Go内置的测试框架提供了基础测试的能力,接着通过一个测试的例子让我们了解基础测试的基本流程。
最后一部分就是项目实践,通过项目需求,需求拆解,逻辑分析,代码实现带我们体验一下真实的项目开发。主要包含:需求分析,代码开发以及测试运行。接着就是把一个项目进行拆解,代码设计落地然后进行测试运行。通过本次的学习,我了解到一个项目的基本流程,主要就是对需求进行拆分,同时我也明白了测试的重要性。