Go 1.13 (2019-09-03)
Go 1.13 于 2019 年 9 月发布,改进了数字字面量和错误处理,并对 Modules 机制进行了完善。
主要变化
语言
-
错误处理增强 (Error Wrapping): Go 1.13 引入了标准的错误包装机制,使得错误处理更加灵活和强大。
fmt.Errorf: 支持%w动词,用于包装错误。errors包新增函数:errors.Is(err, target): 判断错误链中是否包含特定错误。errors.As(err, target): 将错误链中的某个错误转换为特定类型。errors.Unwrap(err): 解包错误,返回被包装的错误。
if errors.Is(err, os.ErrNotExist) {
// 处理文件不存在错误
} -
数字字面量改进:
- 二进制字面量: 使用
0b或0B前缀 (例如0b1011)。 - 八进制字面量: 新增
0o或0O前缀 (例如0o660),旧的0前缀仍有效。 - 十六进制浮点数: 使用
0x前缀和p指数 (例如0x1.0p-1021)。 - 数字分隔符: 允许在数字字面量中使用下划线
_提高可读性 (例如1_000_000,3.1415_9265)。
- 二进制字面量: 使用
-
有符号移位计数: 移位操作符
<<和>>的右操作数现在可以是任何有符号整数类型,不再局限于无符号整数。
工具链
- GOPROXY 默认值:
GOPROXY环境变量默认设置为https://proxy.golang.org,direct。这意味着 Go 默认使用 Google 维护的模块镜像。 - GOSUMDB: 默认启用
sum.golang.org校验和数据库,用于验证模块内容的完整性。 - GOPRIVATE: 新增
GOPRIVATE环境变量,用于指定不应通过代理或校验和数据库访问的私有模块路径。 - go env -w:
go env命令现在支持-w标志,用于设置并持久化环境变量(例如go env -w GOPROXY=direct)。
运行时
- Panic 信息: 运行时 panic 消息现在包含导致越界的索引值和切片长度/容量,便于调试。
- Defer 性能:
defer语句的性能提高了约 30%。 - sync.Pool:
sync.Pool不再在每次垃圾回收 (GC) 时清除所有对象,而是保留部分对象,从而减少了 GC 后的分配峰值。
标准库
- TLS 1.3: 默认启用 TLS 1.3。
crypto/ed25519: 新增crypto/ed25519包,实现 Ed25519 签名算法。time:Duration新增Microseconds和Milliseconds方法。os: 新增UserConfigDir函数。
参考资源
更多详细信息请参考官方发布说明:Go 1.13 Release Notes