day1: 学习青训营的课程
第二节课:Go语言工程实践。
导言: 第一部分学了go语言并发的要点和重点,主要通过goroutine来实现,channel可以用于goroutine之间的数据通信管道;提倡通过通信来共享内存而不是通过内存来实现通信,还有并发安全锁,WaitGroup知识。 第二部分学了依赖管理。学习了GoPATH、GoVendor和Go Module的演化过程。当前主要是用Go Module。 第三部分主要学习了测试的重要性,以及Go语言的单元测试。 第四部分则是通过一个简单的项目案例来了解 开发的规范和流程,有利于大作业的实现和以后工作的思维培养。
第一部分的总结如下: 并发:是多个任务交替执行的能力。多个任务同时存在于系统中,它们在一段时间内交替执行,通过快速地切换执行的上下文,给人的感觉是同时执行的。但实际上,并发的任务并不是同时在同一时刻执行的,而是通过快速切换完成的。 并行:指是多个任务在同一时刻同时执行的能力。多个任务真的是同时进行,通过拥有多个处理单元或多个计算资源来实现任务的并行执行。 简而言之,并发是交替执行多个任务,让人感觉像同时执行,但实际上在一段时间内只有一个任务在执行。而并行是真正的多任务同时执行,借助多个处理单元或资源来实现任务的同时进行。
1、go语言通过goroutine来实现并发,只需要在一个函数前面加上go即可,go func()
2、go语言提倡通过通信来共享内存而不是通过共享内存来实现通信。
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
第四部分:学了项目结构的搭建。