这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天
一.本堂课重点内容
本次课程主要通过四个方向分别进行讲解,首先就是多线程,与并发问题的设计与解决方案,其次是项目依赖管理,接下来是对项目测试方向中单元测试、Mock 测试和基准测试三个方面分别进行阐述,最后通过'社区话题页面'项目对本次学习进行实战演练。
二.重点知识
一.GO语言创建多线程并发的优势。
光用语言描述可能无法直观看出go的优势所在,所以直接上代码进行对比。
**JAVA语言**:
public class Thread {
public static void main(String[] args) {
// 3、new一个新线程对象
Thread t = new MyThread();
// 4、调用start方法启动线程(执行的还是run方法)
t.start();
for (int i = 0; i < 5; i++) {
System.out.println("主线程执行输出:" + i);
}
}
}
/**
* 1、定义一个线程类继承Thread类
*/
class MyThread extends Thread {
/**
* 2、重写run方法,里面是定义线程以后要干啥
*/
@Override
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println("子线程执行输出:" + i);
}
}
}
**GO:语言**
package main
import (
"fmt"
"time"
)
func say(s string) {
for i := 0; i < 5; i++ {
fmt.Println(s)
}
}
func main() {
go say("world")
time.Sleep(time.Second)
}
从代码上,就可以看出我们日常使用的java代码,需要继承Thread类,并重写run()使用比较复杂,而go语言只需要在方法前加上go就可以实现。
二.Lock锁在多线程中的重要性
为什么使用多线程就必须不得不提到锁的关键性,在使用多线程同时操作一个共享资源时,就会出现线程安全问题。 我们用下面的案例进一步演示为什么会出现安全问题:
为了避免多线程在使用系统共享资源时发现问题,我们需要在操作共享资源前加锁,让先到的进程处理完后,后面的进程再进程处理,这样就避免线程安全问题。
三.使用GO项目依赖
GO的依赖管理分为三个阶段: GOPATH,GO Vendor,GO Module.
依赖管理的三要素:
1.配置文件,描述依赖 go.mod
2.中心仓库管理依赖库 Proxy
3.本地工具 go get/mod
四.测试
测试是项目进行不可缺少的条件,一般项目测试主要分为四个方面:单元测试、集成测试、系统测试和验收测试。
单元测试-Tips
●一般覆盖率:50%~60%,较高覆盖率80%+。
测试分支相互独立、全面覆盖。
测试单元粒度足够小,函数单一职责。
三.总结
首先在这里感谢赵征老师的耐心演讲,通过本次学习让我明白go语言多线程与并发问题解决方案,以及在Lock锁上的一些使用。对依赖库进行管理,加强了项目的管理方案。并对测试中的,单元测试、Mock 测试和基准测试三个方面进行了系统讲解。