当前位置: 首页 > news >正文

Go 1.24即将到来!

Go 1.24 尚未发布。以下是正在撰写中的发布说明,预计 Go 1.24 将于 2025 年 2 月发布。

语言改进

Go 1.24 现在全面支持 泛型类型别名:类型别名可以像定义类型一样被参数化。详情请参阅语言规范。目前,可通过设置 GOEXPERIMENT=noaliastypeparams 来禁用该功能,但此选项将在 Go 1.25 中被移除。

工具更新

Go 命令

可执行工具依赖管理

Go 模块现在可以通过 go.mod 文件中的 tool 指令管理可执行工具依赖项,无需再通过在 tools.go 文件中使用空导入的方式作为替代方案。

go tool 命令现在可以运行这些工具,以及 Go 发行版中包含的工具。详情请参阅相关文档。

• go get-tool 标志

使用 -tool 标志可以将工具指令添加到当前模块,同时也会添加 require 指令。

• tool 通配符模式

使用新模式 tool,可以方便地更新或安装所有工具。例如:

• go get -u tool 更新所有工具。

• go install tool 将工具安装到 GOBIN 目录。

缓存改进

通过 go run 生成的可执行文件,以及 go tool 新行为生成的可执行文件,现在会被缓存到 Go 构建缓存中。此改进提高了重复执行的速度,但会增加缓存大小。

JSON 格式的构建输出

go build 和 go install 命令新增 -json 标志,可将构建输出和错误以结构化 JSON 输出到标准输出。详见 go help buildjson。

私有模块认证

新增环境变量 GOAUTH,为私有模块的获取提供灵活的认证方式。详情请参阅 go help goauth。

二进制版本信息

go build 命令会根据版本控制系统的标签和提交信息,在编译后的二进制文件中设置主模块的版本信息。如果代码有未提交的更改,会附加 +dirty 后缀。使用 -buildvcs=false 可禁用版本控制信息。

工具链选择跟踪

新增 GODEBUG 设置项 toolchaintrace=1,可跟踪 go 命令的工具链选择过程。

Cgo

• 支持新的注释以优化 C 函数运行性能:

• #cgo noescape cFunctionName 表示传递到 cFunctionName 的内存不会逃逸。

• #cgo nocallback cFunctionName 表示 cFunctionName 不会回调任何 Go 函数。

• 检测改进:如果 C 函数在多个文件中有不兼容的声明(例如同时声明为 void f(int) 和 void f(double)),Cgo 会报告错误。

Objdump

objdump 工具现在支持以下平台的反汇编:

• 64 位 LoongArch (GOARCH=loong64)

• RISC-V (GOARCH=riscv64)

• S390X (GOARCH=s390x)

Vet 工具

新功能:测试分析器

报告测试、模糊测试、基准测试和示例中的常见错误,如名称不规范或签名不正确。

格式化字符串分析改进

对 fmt.Printf(s)(s 是非常量的格式字符串,且没有其他参数)的调用报告诊断。这类调用可能会错误处理 % 符号,建议使用 fmt.Print。

构建标记分析改进

如果 //go:build 中包含无效的 Go 主版本约束(如 go1.23.1),会报告诊断错误。

运行时改进

性能改进

多项优化使运行时的 CPU 开销平均减少了 2%-3%。主要改进包括:

• 新的内建 map 实现(基于 Swiss Tables)。

• 小对象的内存分配效率提升。

• 新的内部互斥锁实现。

新功能:AddCleanup

提供一种更灵活、更安全的清理机制,可为对象附加清理函数。当对象不再可达时,运行时会自动调用该清理函数。

标准库更新

受限文件系统访问

新增 os.Root 类型,用于在特定目录中执行文件系统操作,且不会允许路径访问目录外的内容。

新增 testing.B.Loop 方法

基准测试可使用 testing.B.Loop 方法简化迭代过程,避免传统的 b.N 循环结构。

新增密码学包

• crypto/hkdf:实现基于 HMAC 的密钥派生函数 HKDF。

• crypto/pbkdf2:实现基于密码的密钥派生函数 PBKDF2。

• crypto/sha3:实现 SHA-3 哈希函数及其扩展函数 SHAKE 和 cSHAKE。

新增实验包:testing/synctest

• 支持并发代码的测试。

• 提供“伪时间”功能以模拟时间行为。

此包为实验性功能,需通过设置 GOEXPERIMENT=synctest 启用,API 可能会在未来版本中更改。

http://www.lryc.cn/news/506917.html

相关文章:

  • FFmpeg库之ffplay
  • scala中模式匹配的应用
  • WebRTC搭建与应用(一)-ICE服务搭建
  • 【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解
  • Kafka学习篇
  • 冬日养仓鼠小指南:温暖与陪伴同行
  • 【计算机视觉基础CV】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用
  • Python爬虫之代理的设置
  • Canoe E2E校验自定义Checksum算法
  • [HNCTF 2022 Week1]你想学密码吗?
  • 端到端自动驾驶大模型:视觉-语言-动作模型 VLA
  • druid与pgsql结合踩坑记
  • 【xxl-job】XXL-Job源码深度剖析:分布式任务调度的艺术与实践
  • 图漾相机-ROS1_SDK_ubuntu版本编译(新版本)
  • 项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%
  • 【NLP 17、NLP的基础——分词】
  • uniapp blob格式转换为video .mp4文件使用ffmpeg工具
  • 【无标题】 [蓝桥杯 2024 省 B] 好数
  • Leecode刷题C语言之同位字符串连接的最小长度
  • Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
  • 音频进阶学习八——傅里叶变换的介绍
  • 将4G太阳能无线监控的视频接入电子监控大屏,要考虑哪些方面?
  • 使用docker拉取镜像很慢或者总是超时的问题
  • Redis数据库笔记
  • U盘出现USBC乱码文件的全面解析与恢复指南
  • 多线程 - 自旋锁
  • vue2 - Day02 -计算属性(computed)、侦听器(watch)和方法(methods)
  • Linux C 程序 【05】异步写文件
  • Liveweb视频汇聚平台支持WebRTC协议赋能H.265视频流畅传输
  • SQL组合查询