

大家好,我是猫头虎博主!🐯 今天,我要带大家深入探讨Go语言的一次重要更新——Go 1.9版本。这次更新不仅包括对语言、标准库、运行时和工具的多项改进,还引入了诸如类型别名、新的math/bits包等激动人心的新特性。让我们一起探索这些变化,并了解它们如何影响我们的编程实践吧!搜索词条:Go 1.9, 类型别名, sync.Map, testing包, 单调时钟。
2017年8月24日,Francesc Campoy 宣布Go 1.9正式发布。这一版本着重于运行时和工具的改进,虽然这让发布公告看起来不那么“激动人心”,但无疑是一个重大进步。让我们一探究竟!
Go 1.9版本的最大变化是引入了类型别名,这是为了支持渐进式代码修复。类型别名声明的形式如下:
type T1 = T2这个声明为T2类型引入了一个别名T1,就像byte一直是uint8的别名一样。
math/bits包的新特性 🔧新的math/bits包为无符号整数提供位计数和操作功能,尽可能通过特殊的CPU指令实现。例如,在x86-64系统上,bits.TrailingZeros(x)会使用BSF指令。
sync包的新增类型 🛠️sync包新增了一个Map类型,安全支持并发访问。这个类型并非普通Go的map类型的通用替代品,具体用法请参阅文档。
testing包的改进 🧪testing包新增了Helper方法,适用于testing.T和testing.B,用于标记调用函数为测试辅助函数。例如:
package p
import "testing"
func failure(t *testing.T) {
t.Helper() // 这个调用在错误报告中隐藏了这个函数。
t.Fatal("failure")
}
func Test(t *testing.T) {
failure(t)
}failure作为测试辅助函数,错误消息将指向调用failure的第11行,而不是failure中调用t.Fatal的第7行。
time包的更新 🕒time包现在在每个Time值中透明地跟踪单调时间,使得计算两个Time值之间的持续时间成为了一种安全操作。
例如,以下代码现在即使在跨越秒调整的情况下也能正确计算经过的时间:
start := time.Now()
f()
elapsed := time.Since(start)为了提高Go编译器的速度,Go 1.9在编译包中的函数时实现了并发。
Go 1.9包含了更多的添加、改进和修复。更多详细信息可在[Go 1.9发布说明](https://
go.dev/doc/go1.9)中找到。
特性 | 描述 |
|---|---|
类型别名 | 支持渐进式代码修复的新特性 |
math/bits | 为无符号整数提供位计数和操作功能 |
sync.Map | 并发安全的新Map类型 |
testing包 | 新增Helper方法,改进测试输出 |
单调时钟 | time包现在可以安全地计算时间间隔 |
编译器性能 | Go 1.9在编译包中的函数时实现了并发 |