Go 1.18初窥
根据Go Blog: Go 1.18 is released!一文的概要,了解下Go 1.18的新特性。
(1)Generics
引入了泛型,类型参数用[]
包起来表示,也支持用interface自定义类型约束,还有类型推断。
主要参考这些资料:
- Tutorial: Getting started with generics
- Go Blog: An Introduction To Generics
- Go Generics example
- Type Parameters Proposal: 有助于理解泛型的设计和实现。
(2)fuzzing
根据维基百科,模糊测试定义如下:
模糊测试 (fuzz testing, fuzzing)是一种软件测试技术。其核心思想是将自动或半自动生成的随机数据输入到一个程序中,并监视程序异常,如崩溃,断言(assertion)失败,以发现可能的程序错误,比如内存泄漏。模糊测试常常用于检测软件或计算机系统的安全漏洞。
模糊测试可以突破单元测试的界限,自行基于给定的少量测试集(称为seed)生成更多的测试集作为输入,可能触及一些难以想到的边界测试用例。
初步看来,它的验证点不在于函数的基本功能正确与否,而是边界情况下是否能够work、是否会产生预料外的结果、是否有安全漏洞等。
使用go test -fuzz=<FuzzTestName> -fuzztime <duration>
来执行fuzz tests,如果没有提供fuzztime参数,那么测试会一直跑下去直到失败为止。
参考资料:
- Tutorial: Getting started with fuzzing
-
Go Fuzzing:对如何编写、运行fuzz测试以及相关术语集有比较详细的介绍。
- Fuzzing-trophy-case:一些在实际代码库中应用的例子
(3)workspaces
解决work with multiple modules的问题。也就是一个代码仓库里能够有多个go的module,每个module有各自的go.mod和go.sum文件,这些 go module 统一由仓库根路径下的go.work文件管理。
上述三部分内容中的Tutorial相关代码已经提交到:https://github.com/chenlujjj/go1.18-preview。
要了解更多关于Go 1.18的新特性,阅读 Go 1.18 Release Notes吧。
Comments