Go语言进阶与依赖管理 | 青训营

85 阅读3分钟

今天学习了 Go 语言进阶、依赖管理和测试,从而对 Go 语言有了更深入的理解。本篇学习笔记将从这三个部分进行详尽探讨。

一、Go语言进阶

1.1 协程

在 Go 语言中,协程(goroutine)是一种并发执行的程序实体,通过高效的调度模型实现高并发操作。与开销巨大的线程相比,开启和切换协程所需的资源更少,提供了一种效率更高、更容易实现并发的手段。

1.2 通道

通道(channel)是用于协程之间通信的重要工具,实现了“以通信代替共享内存”的CSP(Communicating Sequential Processes)模型。通过 channel,各个协程可以在保证并发安全的情况下共享数据。

1.3 Sync

Go 语言的 sync 提供了一系列让协程间同步变得更安全和简单的功能,如 WaitGroup,它用于保护多个协程同时访问共享资源时的数据竞态问题,并协调多个协程间的执行顺序。

二、Go语言依赖管理

依赖管理对于 Go 项目非常重要。Go 语言在依赖管理上的思路从 GOPATH 到 Go Vender,最后来到了现在的 Go Module。Go modules 从 Go 1.11开始实验性引入,Go 1.16默认开启。通过模块,我们可以在项目任何位置打开我们的 Go 项目,而不再需要担忧 GOPATH 的问题。

三、Go语言测试

3.1 单元测试

单元测试主要包括输入、测试单元、输出、以及校对。单元的概念比较广,包括接口、函数、模块等。单元测试一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有 bug 的情况下,通过编写单元测试,可以在一个较短周期内定位和修复问题。

3.2 Mock 测试

Mock 是测试中非常重要的一个环节。当我们需要测试的函数依赖一些复杂的操作时,我们可以使用 Mock 方法来模拟这些复杂的操作,来让我们的单元测试更加高效和准确。

3.3 基准测试

基准测试是一种对程序性能进行测评的方法。通过基准测试,我们可以在代码优化或者重构后比较程序性能是否改变。

个人思考

Go 语言的协程机制和通道机制是我最喜欢的两个功能。利用协程,我们可以轻松地编写高并发的代码;借助通道,我们可以让协程之间的通信变得十分直观。然后通过 sync 提供的工具,可以帮助我们更好地协调协程间的行为和保护共享数据。

同时,Go 的依赖管理体系也十分成熟,这点在很多语言中是很难看到的。Go Modules的推出让 Go 的包管理达到了一个新的高度,使得 Go 程序的开发更简单,也使得 Go 的项目代码更具可移植性。

测试是开发过程中不可分割的一部分,Go 通过内置的 testing 包,使得编写和运行测试变得非常简便。借助 Mock 和基准测试,我们可以更全面地保证代码的质量和性能。