GO语言进阶与工程测试 | 青训营笔记

87 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 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锁在多线程中的重要性

为什么使用多线程就必须不得不提到锁的关键性,在使用多线程同时操作一个共享资源时,就会出现线程安全问题。 我们用下面的案例进一步演示为什么会出现安全问题:

image.png

image.png

为了避免多线程在使用系统共享资源时发现问题,我们需要在操作共享资源前加锁,让先到的进程处理完后,后面的进程再进程处理,这样就避免线程安全问题。

三.使用GO项目依赖

GO的依赖管理分为三个阶段: GOPATH,GO Vendor,GO Module.

依赖管理的三要素:

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

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

3.本地工具 go get/mod

四.测试

测试是项目进行不可缺少的条件,一般项目测试主要分为四个方面:单元测试、集成测试、系统测试和验收测试。

单元测试-Tips

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

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

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

三.总结

首先在这里感谢赵征老师的耐心演讲,通过本次学习让我明白go语言多线程与并发问题解决方案,以及在Lock锁上的一些使用。对依赖库进行管理,加强了项目的管理方案。并对测试中的,单元测试、Mock 测试和基准测试三个方面进行了系统讲解。

四.引用

掘金课程:juejin.cn/course/byte… juejin.cn/course/byte…