go并发与单元测试| 青训营

95 阅读3分钟

day1: 学习青训营的课程

第二节课:Go语言工程实践。

导言: 第一部分学了go语言并发的要点和重点,主要通过goroutine来实现,channel可以用于goroutine之间的数据通信管道;提倡通过通信来共享内存而不是通过内存来实现通信,还有并发安全锁,WaitGroup知识。 第二部分学了依赖管理。学习了GoPATH、GoVendor和Go Module的演化过程。当前主要是用Go Module。 第三部分主要学习了测试的重要性,以及Go语言的单元测试。 第四部分则是通过一个简单的项目案例来了解 开发的规范和流程,有利于大作业的实现和以后工作的思维培养。

第一部分的总结如下: 并发:是多个任务交替执行的能力。多个任务同时存在于系统中,它们在一段时间内交替执行,通过快速地切换执行的上下文,给人的感觉是同时执行的。但实际上,并发的任务并不是同时在同一时刻执行的,而是通过快速切换完成的。 并行:指是多个任务在同一时刻同时执行的能力。多个任务真的是同时进行,通过拥有多个处理单元或多个计算资源来实现任务的并行执行。 简而言之,并发是交替执行多个任务,让人感觉像同时执行,但实际上在一段时间内只有一个任务在执行。而并行是真正的多任务同时执行,借助多个处理单元或资源来实现任务的同时进行

1go语言通过goroutine来实现并发,只需要在一个函数前面加上go即可,go func()
2go语言提倡通过通信来共享内存而不是通过共享内存来实现通信。
3、Channel是用于goroutine通信的一种方法。
4、为了实现并发安全,在某些情况下可以进行加锁。sync.Mutex
5、WaitGroup可以用来统计goroutine是否执行完毕。

第二部分,我总结了一些go mod的命令和用法。

1、初始化一个新的Go Module:
go mod init myDemo // 初始化一个新的Go Module,该命令会在当前目录下创建一个新的go.mod文件,用于管理依赖。

2、添加依赖:
go get <module_name>  // 例如go get github.com/gin-gonic/gin。这将下载gin包并将其添加到go.mod文件中。

3、升级依赖:
go get -u <module_name>  // 例如:go get -u github.com/gin-gonic/gin

4、移除依赖:
go mod tidy  // 这个命令会移除go.mod文件中未使用的依赖项。

5、查看当前项目的依赖:
go list -m all  // 这将显示项目中使用的所有直接和间接依赖。

6、清除所有下载的依赖项(慎用):
go clean -modcache  // 这会清除Go Module缓存中的所有下载的依赖项。

第三部分:测试 这一部分学会了测试的概念,和go语言常用的第三方测试工具的使用,例如Testify是一个流行的第三方断言库,提供了更丰富的断言函数。

package main

import "testing"

func TestAdd(t *testing.T) {
    result := Add(2, 3)
    expected := 5

    if result != expected {
        t.Errorf("Add(2, 3) returned %d, expected %d", result, expected)
    }
}

go test

PASS

第四部分:学了项目结构的搭建。