官网资源与产品介绍
官网提供了我们的代码库、文档和招聘相关链接。产品方面,有产品 ,包含 VictoriaMetrics、VictoriaLogs、VictoriaTraces 等,还有企业版、云服务、异常检测等;套餐与特性;资源 涵盖社区、GitHub 代码库、文档、博客、案例研究、安全、可持续性等;支持 包括企业支持和社区支持;关于我们 涉及团队、招聘、客户、合作伙伴、新闻与文章、联系我们等。还可联系我们预约演示。
预约演示问题说明
若遇到嵌入式小部件被阻止的情况,是因为您的隐私设置或扩展程序阻止了预约小部件,可打开预约页面,若使用了阻止程序,请允许此网站的嵌入内容,然后再次尝试。
Go 1.27 交互式之旅
文章背景
Go 1.27 即将发布,本文将通过可运行的示例,让您体验其新变化。交互式 Go 之旅由 Anton Zhiyanov 发起,他为从 Go 1.22 到 Go 1.26 的每个版本都编写了相关内容,现在由我们接力。他之前的文章仍值得一读,如Go 1.22 交互式之旅等。本文基于官方发布说明和 Go 源代码编写,遵循 BSD - 3 - Clause 许可证,并非完整列表,如需查看完整内容,请参考 官方发布说明。文中链接可让您了解特性的动机、用法和实现细节,为使示例简洁,常省略错误处理部分,但生产环境中请勿这样做。
新特性介绍
- 泛型方法:本次版本亮点,方法声明可声明自身的类型参数,不受接收者类型限制。此前只有顶级函数可为泛型,对某个类型的泛型操作只能作为包级函数,不能作为方法。示例展示了 `Box` 类型的 `Map` 方法,可改变元素类型。但接口不能声明带类型参数的方法,泛型方法也不能用于满足接口。
- 📗泛型方法
- 📕77273
- 📖524b860等
- 📔Robert Griesemer等
- 结构体字面量字段选择器:结构体字面量中的键现在可以是结构体类型的任何有效字段选择器,可直接设置提升字段,无需指定嵌入式类型。示例展示了 `User` 类型设置 `ID` 和 `Name` 的变化。
- 📗复合字面量
- 📕9859
- 📖1a8f9d8等
- 📔Robert Griesemer等
- 广义函数类型推断:函数类型推断扩展到期望匹配函数类型的所有上下文,包括类型转换和复合字面量,此前需手动指定类型参数。示例展示了将泛型辅助函数放入切片的情况。
- 📗可赋值性
- 📕77245
- 📖ef06728等
- 📔Robert Griesemer等
- 更快的内存分配:编译器会生成对特定大小的内存分配例程的调用,降低小内存分配成本,实际内存分配密集型程序总体性能提升约 1%,但二进制文件大小会增加约 60 KB。无需修改代码,若需禁用可使用 `GOEXPERIMENT=nosizespecializedmalloc` 进行构建,预计在 Go 1.28 中移除该可选退出选项。
- 📗运行时发布说明
- 📕79286
- 📖2a93576
- 📔Michael Matloob
- 回溯中的 goroutine 标签:对于指定使用 Go 1.27 或更高版本的模块,回溯信息会在每个 goroutine 的标题行中包含 runtime/pprof 的 goroutine 标签,有助于区分相同的 goroutine。可使用 `GODEBUG=tracebacklabels=0` 禁用此功能,该可选退出选项预计会一直保留。
- 📗runtime/pprof
- 📕76349
- 📖3694f33等
- 📔David Finkel
- goroutine 泄漏分析:Go 1.26 引入的实验性 goroutine 泄漏检测器,在 Go 1.27 中正式成为常规分析工具,`runtime/pprof` 提供 `goroutineleak` 分析工具,无需使用 `GOEXPERIMENT`。示例展示了泄漏的 goroutine 及分析信息的获取。
- 📗runtime/pprof
- 📕74609
- 📖253aa2a等
- 📔Vlad Saioc等
- 后量子签名:新的 crypto/mldsa 包实现了 ML - DSA 后量子数字签名方案,有三种参数集,支持还扩展到了 crypto/x509 和 crypto/tls。
- 📗crypto/mldsa
- 📕77626
- 📖7bc111c
- 📔Filippo Valsorda等
- uuid 包:Go 标准库新增 uuid 包,可根据 RFC 9562 生成和解析 UUID,使用加密安全的随机源,随机组件的 UUID 可比较。示例展示了 UUID 的解析、生成等操作。
- 📗uuid
- 📕62026
- 📖2fb2b98
- 📔Damien Neil
- 默认使用 JSON v2:`encoding/json/v2` 自 Go 1.25 以来处于实验阶段,在 Go 1.27 中该实验结束,经典的 `encoding/json` 包现在由 v2 实现支持。切换透明,提供新选项,若遇兼容性问题,可使用 `GOEXPERIMENT=nojsonv2` 恢复 v1 实现。示例展示了 v2 API 的使用。需注意 v2 默认不对映射键排序,可传递选项实现稳定输出。
- 📗encoding/json/v2
- 📕71497
- 📖e62d3e6
- 📔Joe Tsai等
- 便携式 SIMD:Go 1.27 增加实验性的 simd 包,便携式、向量大小无关的 SIMD,可在支持硬件向量指令的平台上编译为实际指令,不支持则回退到纯 Go 模拟。默认关闭,可使用 `GOEXPERIMENT=simd` 启用。示例展示了向量操作。
- 📗simd
- 📕78902
- 📖44a4be9等
- 📔David Chase等
- 围绕最后一个分隔符进行切割:Go 1.27 增加了 `strings.CutLast` 和 `bytes.CutLast`,用于围绕分隔符的最后一个出现位置进行分割。示例展示了其使用。
- 📗strings.CutLast等
- 📕71151
- 📖11b596c
- 📔qiulaidongfeng
- 泛型哈希:`hash/maphash` 包新增 `Hasher[T]` 接口,可对某个类型的值进行哈希和比较。有现成的 `ComparableHasher[T]`,也可自定义哈希器,示例展示了不区分大小写的字符串哈希器。
- 📗hash/maphash
- 📕70471
- 📖(原文未完整给出)
- 📔(原文未完整给出)