学习了 Go 语言进阶、依赖管理和测试,对 Go 语言有了更深入的理解,分享笔记如下:
一、Go语言进阶
并发与并行
并发:多线程程序在单核cpu上运行
并行:多线程程序在多核cpu上运行
通道
通道是用于协程之间通信的重要工具,实现了“以通信代替共享内存”的CSP模型。通过 channel,各个协程可以在保证并发安全的情况下共享数据。
Sync
Go 语言的 sync 提供了一系列让协程间同步变得更安全和简单的功能,如 WaitGroup,它用于保护多个协程同时访问共享资源时的数据竞态问题,并协调多个协程间的执行顺序。
二、Go语言依赖管理
依赖管理对于 Go 项目具有极其重要的意义。Go 语言在依赖管理方面的发展经历了从 GOPATH,然后到 Go Vender,最终演变到如今的 Go Module。从 Go 1.11 版本开始,Go Module 被作为实验性功能引入,而在 Go 1.16 版本中则默认开启。借助于这一依赖管理工具,我们能够在项目的任何位置开展我们的 Go 项目,而无需再为 GOPATH 所带来的问题而烦扰。
三、Go语言测试
单元测试
单元测试主要包括输入、测试单元、输出、以及校对。单元的概念比较广,包括接口、函数、模块等。单元测试一方面可以保证质量,在整体覆盖率足够的情况下,一定程度上既保证了新功能本身的正确性,又未破坏原有代码的正确性。另一方面可以提升效率,在代码有 bug 的情况下,通过编写单元测试,可以在一个较短周期内定位和修复问题。
基准测试
基准测试是一种对程序性能进行测评的方法。通过基准测试,我们可以在代码优化或者重构后比较程序性能是否改变。
Mock 测试
Mock 是测试中非常重要的一个环节。当我们需要测试的函数依赖一些复杂的操作时,我们可以使用 Mock 方法来模拟这些复杂的操作,来让我们的单元测试更加高效和准确。
基准测试
基准测试是一种对程序性能进行测评的方法。通过基准测试,我们可以在代码优化或者重构后比较程序性能是否改变。
思考
我非常喜欢 Go 语言的两个特性:协程机制和通道机制。协程使得编写高并发代码变得轻而易举,而通道则直观地处理了协程间的通信。此外,通过 sync 包提供的工具,我们能更好地协调协程行为并保护共享数据。
与此同时,Go 在依赖管理方面也表现出色,这在其他语言中并不常见。借助 Go Modules,包管理得到极大改进,使得开发和项目代码的可移植性都更上一层楼。
测试是开发过程中不可或缺的一环,而 Go 内置的 testing 包使得编写和运行测试变得十分便捷。通过 Mock 和基准测试,我们能够更全面地确保代码质量和性能。