官网资源与产品介绍官网提供了我们的代码库、文档和招聘相关链接。产品方面有产品 包含 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 方法可改变元素类型。但接口不能声明带类型参数的方法泛型方法也不能用于满足接口。泛型方法77273524b860等Robert Griesemer等结构体字面量字段选择器结构体字面量中的键现在可以是结构体类型的任何有效字段选择器可直接设置提升字段无需指定嵌入式类型。示例展示了 User 类型设置 ID 和 Name 的变化。复合字面量98591a8f9d8等Robert Griesemer等广义函数类型推断函数类型推断扩展到期望匹配函数类型的所有上下文包括类型转换和复合字面量此前需手动指定类型参数。示例展示了将泛型辅助函数放入切片的情况。可赋值性77245ef06728等Robert Griesemer等更快的内存分配编译器会生成对特定大小的内存分配例程的调用降低小内存分配成本实际内存分配密集型程序总体性能提升约 1%但二进制文件大小会增加约 60 KB。无需修改代码若需禁用可使用 GOEXPERIMENTnosizespecializedmalloc 进行构建预计在 Go 1.28 中移除该可选退出选项。运行时发布说明792862a93576Michael Matloob回溯中的 goroutine 标签对于指定使用 Go 1.27 或更高版本的模块回溯信息会在每个 goroutine 的标题行中包含 runtime/pprof 的 goroutine 标签有助于区分相同的 goroutine。可使用 GODEBUGtracebacklabels0 禁用此功能该可选退出选项预计会一直保留。runtime/pprof763493694f33等David Finkelgoroutine 泄漏分析Go 1.26 引入的实验性 goroutine 泄漏检测器在 Go 1.27 中正式成为常规分析工具runtime/pprof 提供 goroutineleak 分析工具无需使用 GOEXPERIMENT。示例展示了泄漏的 goroutine 及分析信息的获取。runtime/pprof74609253aa2a等Vlad Saioc等后量子签名新的 crypto/mldsa 包实现了 ML - DSA 后量子数字签名方案有三种参数集支持还扩展到了 crypto/x509 和 crypto/tls。crypto/mldsa776267bc111cFilippo Valsorda等uuid 包Go 标准库新增 uuid 包可根据 RFC 9562 生成和解析 UUID使用加密安全的随机源随机组件的 UUID 可比较。示例展示了 UUID 的解析、生成等操作。uuid620262fb2b98Damien Neil默认使用 JSON v2encoding/json/v2 自 Go 1.25 以来处于实验阶段在 Go 1.27 中该实验结束经典的 encoding/json 包现在由 v2 实现支持。切换透明提供新选项若遇兼容性问题可使用 GOEXPERIMENTnojsonv2 恢复 v1 实现。示例展示了 v2 API 的使用。需注意 v2 默认不对映射键排序可传递选项实现稳定输出。encoding/json/v271497e62d3e6Joe Tsai等便携式 SIMDGo 1.27 增加实验性的 simd 包便携式、向量大小无关的 SIMD可在支持硬件向量指令的平台上编译为实际指令不支持则回退到纯 Go 模拟。默认关闭可使用 GOEXPERIMENTsimd 启用。示例展示了向量操作。simd7890244a4be9等David Chase等围绕最后一个分隔符进行切割Go 1.27 增加了 strings.CutLast 和 bytes.CutLast用于围绕分隔符的最后一个出现位置进行分割。示例展示了其使用。strings.CutLast等7115111b596cqiulaidongfeng泛型哈希hash/maphash 包新增 Hasher[T] 接口可对某个类型的值进行哈希和比较。有现成的 ComparableHasher[T]也可自定义哈希器示例展示了不区分大小写的字符串哈希器。hash/maphash70471原文未完整给出原文未完整给出
Go 1.27 即将发布:泛型方法等 12 项新特性,小内存分配成本降 30%!
官网资源与产品介绍官网提供了我们的代码库、文档和招聘相关链接。产品方面有产品 包含 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 方法可改变元素类型。但接口不能声明带类型参数的方法泛型方法也不能用于满足接口。泛型方法77273524b860等Robert Griesemer等结构体字面量字段选择器结构体字面量中的键现在可以是结构体类型的任何有效字段选择器可直接设置提升字段无需指定嵌入式类型。示例展示了 User 类型设置 ID 和 Name 的变化。复合字面量98591a8f9d8等Robert Griesemer等广义函数类型推断函数类型推断扩展到期望匹配函数类型的所有上下文包括类型转换和复合字面量此前需手动指定类型参数。示例展示了将泛型辅助函数放入切片的情况。可赋值性77245ef06728等Robert Griesemer等更快的内存分配编译器会生成对特定大小的内存分配例程的调用降低小内存分配成本实际内存分配密集型程序总体性能提升约 1%但二进制文件大小会增加约 60 KB。无需修改代码若需禁用可使用 GOEXPERIMENTnosizespecializedmalloc 进行构建预计在 Go 1.28 中移除该可选退出选项。运行时发布说明792862a93576Michael Matloob回溯中的 goroutine 标签对于指定使用 Go 1.27 或更高版本的模块回溯信息会在每个 goroutine 的标题行中包含 runtime/pprof 的 goroutine 标签有助于区分相同的 goroutine。可使用 GODEBUGtracebacklabels0 禁用此功能该可选退出选项预计会一直保留。runtime/pprof763493694f33等David Finkelgoroutine 泄漏分析Go 1.26 引入的实验性 goroutine 泄漏检测器在 Go 1.27 中正式成为常规分析工具runtime/pprof 提供 goroutineleak 分析工具无需使用 GOEXPERIMENT。示例展示了泄漏的 goroutine 及分析信息的获取。runtime/pprof74609253aa2a等Vlad Saioc等后量子签名新的 crypto/mldsa 包实现了 ML - DSA 后量子数字签名方案有三种参数集支持还扩展到了 crypto/x509 和 crypto/tls。crypto/mldsa776267bc111cFilippo Valsorda等uuid 包Go 标准库新增 uuid 包可根据 RFC 9562 生成和解析 UUID使用加密安全的随机源随机组件的 UUID 可比较。示例展示了 UUID 的解析、生成等操作。uuid620262fb2b98Damien Neil默认使用 JSON v2encoding/json/v2 自 Go 1.25 以来处于实验阶段在 Go 1.27 中该实验结束经典的 encoding/json 包现在由 v2 实现支持。切换透明提供新选项若遇兼容性问题可使用 GOEXPERIMENTnojsonv2 恢复 v1 实现。示例展示了 v2 API 的使用。需注意 v2 默认不对映射键排序可传递选项实现稳定输出。encoding/json/v271497e62d3e6Joe Tsai等便携式 SIMDGo 1.27 增加实验性的 simd 包便携式、向量大小无关的 SIMD可在支持硬件向量指令的平台上编译为实际指令不支持则回退到纯 Go 模拟。默认关闭可使用 GOEXPERIMENTsimd 启用。示例展示了向量操作。simd7890244a4be9等David Chase等围绕最后一个分隔符进行切割Go 1.27 增加了 strings.CutLast 和 bytes.CutLast用于围绕分隔符的最后一个出现位置进行分割。示例展示了其使用。strings.CutLast等7115111b596cqiulaidongfeng泛型哈希hash/maphash 包新增 Hasher[T] 接口可对某个类型的值进行哈希和比较。有现成的 ComparableHasher[T]也可自定义哈希器示例展示了不区分大小写的字符串哈希器。hash/maphash70471原文未完整给出原文未完整给出