Go 1.25实验性JSON包:性能提升和严格语法

2025-09-10

Go 1.25 引入了实验性 `encoding/json/v2` 和 `encoding/json/jsontext` 包,旨在改进 Go 的 JSON 编解码功能。新包解决了旧包中存在的语法处理不精确、性能瓶颈以及 API 缺陷等问题,例如对无效 UTF-8 的容错处理、重复键名处理以及空切片/映射的序列化方式等。新版本提供更严格的语法检查,并引入了流式处理,显著提升了性能,尤其是在反序列化方面。虽然新包的 API 与旧包兼容性高,但建议开发者使用 `GOEXPERIMENT=jsonv2` 进行测试,并提供反馈。

阅读更多
(go.dev)
开发

Go语言原生支持FIPS 140-3加密模块,安全合规新纪元

2025-07-16

Go语言团队携手Geomys公司推出原生FIPS 140-3加密模块,彻底解决了Go语言在受监管环境中FIPS 140合规性的难题。该模块已获得CAVP证书A6650,并通过CMVP审核,现已包含在Go 1.24及以上版本中。它不仅提供无缝的开发者体验,而且在安全性方面也毫不妥协,例如采用优化的ECDSA签名算法和基于AES-256-CTR的NIST DRBG,并支持广泛的平台和算法。与之前的Go+BoringCrypto相比,该模块拥有更广泛的算法覆盖范围、更好的性能和更强的安全性,为Go开发者构建符合FIPS 140-3标准的应用提供了最简单、最安全的途径。

阅读更多
(go.dev)
开发 加密模块

Go泛型接口的巧妙运用:构建高效自适应的树形结构

2025-07-10

本文探讨了Go语言泛型接口的高级用法,特别是如何在构建二叉搜索树等数据结构时,通过自引用泛型接口优雅地处理类型约束。文章以树形结构为例,对比了三种实现方式:使用`cmp.Ordered`、自定义比较函数和自引用泛型接口。最后,文章深入探讨了如何结合`comparable`约束构建有序集合,以及如何避免因指针接收者导致的复杂性,并建议在设计时优先考虑简洁易读性。

阅读更多
(go.dev)
开发 Go泛型

Go语言错误处理:一场持续多年的语法之争终结

2025-06-03

Go团队经过多年努力,尝试改进冗长的错误处理语法,先后提出了“check/handle”、“try”和“?”运算符等方案,但均未获得广泛共识。文章总结了这些尝试的历程,以及最终决定放弃语法层面改进的理由:缺乏共识、成本高昂、现有方法可行。Go团队认为,与其追求语法上的简洁,不如关注更完善的错误处理机制和工具,并建议开发者关注错误处理的实用性和可读性,而非仅仅追求代码精简。

阅读更多
(go.dev)
开发 语法设计

Go 1.25移除核心类型概念,简化语言规范

2025-03-26

Go 1.18 引入泛型后,为了简化处理泛型操作数,引入了“核心类型”的概念。然而,这给语言规范带来了复杂性,并限制了某些操作的灵活性。Go 1.25 将移除核心类型,通过更清晰简洁的规则描述来替代,从而简化语言规范,并为未来的语言改进打开大门,例如更强大的切片操作和改进的类型推断。此次更改不会影响现有 Go 程序的行为。

阅读更多
(go.dev)
开发 语言规范

Go 1.24:Wasm 扩展性增强,构建 WASI Reactor

2025-02-14

Go 1.24 通过 `go:wasmexport` 指令和 WASI Reactor 的构建能力,显著增强了 WebAssembly (Wasm) 支持。开发者现在可以将 Go 函数导出到 Wasm,实现与宿主应用的无缝集成。新增的 WASI Reactor 模式允许持续运行的 Wasm 模块,并多次响应事件或请求,无需重新初始化。虽然存在 Wasm 单线程和类型限制等问题,但 Go 1.24 的改进依然为 Go 在 Wasm 生态系统中的应用拓展了广阔空间。

阅读更多
(go.dev)
开发

Go Protobuf 推出新的不透明 API

2024-12-16

Go 语言团队发布了 Go Protobuf 的一个新 API——不透明 API。此 API 与现有的开放结构 API 并存,不会移除旧 API。新 API 的主要改进在于解耦了生成的代码与底层内存表示,从而提高了性能、减少了内存分配,并支持延迟解码等优化。它通过隐藏结构体字段,仅通过访问器方法访问,避免了指针相关错误和意外共享。迁移到新 API 可以通过启用混合 API,使用 `open2opaque` 工具以及选择不透明 API 完成。

阅读更多
(go.dev)
开发

ChaCha8 在标准库中的使用

2024-05-07

该博客文章讨论了 ChaCha8 加密函数的实现及其在 Go 标准库中的应用。文章介绍了 ChaCha8 的历史、设计原理和实现细节,并展示了如何在 Go 程序中使用 ChaCha8 进行加密和解密操作。此外,文章还提供了代码示例和基准测试结果,以帮助读者了解 ChaCha8 的性能和使用方法。

阅读更多
(go.dev)
52
未分类 加密学 golang