热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

golang1.17于2021年8月16日正式发布

马特皮尔林和亚历克斯拉科齐2021年8月16日今天,Go团队很高兴发布Go1.17,您可以通过访问下载页面获得。编译器改进此版本为编译器带来了额外

马特·皮尔林和亚历克斯·拉科齐

2021 年 8 月 16 日

今天,Go 团队很高兴发布 Go 1.17,您可以通过访问 下载页面获得


编译器改进

此版本为编译器带来了额外的改进,即传递函数参数和结果的 新方法。这一变化表明,Go 程序的性能提高了约 5%,amd64 平台的二进制文件大小减少了约 2%。未来版本将支持更多平台。

Go 1.17 实现了一种使用寄存器而不是堆栈传递函数参数和结果的新方法。一组具有代表性的 Go 包和程序的基准测试显示,性能提高了约 5%,二进制大小通常减少了约 2%。这是目前在Linux,MacOS和Windows中启用的64位x86架构(的linux/amd64, darwin/amd64和windows/amd64端口)。

此更改不会影响任何安全 Go 代码的功能,并且不会影响大多数汇编代码。它可能会影响unsafe.Pointer 访问函数参数时违反规则的代码,或者取决于涉及比较函数代码指针的未记录行为。为了保持与现有汇编函数的兼容性,编译器生成了在新的基于寄存器的调用约定和以前的基于堆栈的调用约定之间进行转换的适配器函数。这些适配器通常对用户不可见,除了在汇编代码中获取 Go 函数的地址或在 Go 代码中使用reflect.ValueOf(fn).Pointer() 或获取汇编函数的地址之外unsafe.Pointer现在将返回适配器的地址。依赖于这些代码指针值的代码可能不再按预期运行。在两种情况下,适配器也可能导致非常小的性能开销:通过func值从 Go 间接调用汇编函数,以及从汇编调用 Go 函数。

运行时堆栈跟踪的格式(在发生未捕获的恐慌时或runtime.Stack调用时打印)得到改进。以前,函数参数根据内存布局打印为十六进制字。现在源代码中的每个参数都单独打印,用逗号分隔。聚合类型(结构、数组、字符串、切片、接口和复杂)参数由花括号分隔。需要注意的是,仅存在于寄存器中而不存储到内存中的参数的值可能不准确。不再打印函数返回值(通常不准确)。

现在可以内联包含闭包的函数。此更改的一个影响是,带有闭包的函数可能会为函数内联的每个位置生成一个不同的闭包代码指针。Go 函数值不能直接比较,但此更改可能会揭示使用reflect 或unsafe.Pointer绕过此语言限制并通过代码指针比较函数的代码中的错误。


windows ARM

Go 1.17 还增加了 对 Windows 上 64 位 ARM 架构的支持,让 gophers 在更多设备上本地运行 Go。


go module

我们还在此版本中引入了修剪后的模块图。go 1.17在其go.mod文件中指定或更高的模块将使其模块图仅包含其他 Go 1.17 模块的直接依赖项,而不是它们的完整传递依赖项。这应该有助于避免go.mod为其他不相关的依赖项下载或读取文件的需要——节省日常开发的时间。

Go 1.17对语言进行了三个小改动。前两个是unsafe包中的新函数,使程序更容易遵守unsafe.Pointer规则:unsafe.Add允许 更安全的指针算术,同时unsafe.Slice允许 更安全地将指针转换为切片。第三个变化是语言类型转换规则的扩展,允许从切片到数组指针的转换 ,前提是切片在运行时至少与数组一样大。

最后还有很多其他改进和错误修复,包括对crypto/x509 的验证改进,以及对URL 查询解析的更改 。有关更改的完整列表以及有关上述改进的更多信息,请参阅 完整的发行说明

感谢所有通过编写代码、提交错误、分享反馈以及测试 Beta 版和候选发布版而为此版本做出贡献的人。您的努力有助于确保 Go 1.17 尽可能稳定。与往常一样,如果您发现任何问题,请 提出问题

我们希望您喜欢新版本!

 


推荐阅读
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • PL2303HXD电路图(USB转UART)介绍及应用
    本文介绍了PL2303HXD电路图(USB转UART)的特性和应用,该电路图可以实现RS232和USB信号的转换,方便嵌入到手持设备中。PL2303HXD作为USB/RS232双向转换器,可以将USB数据转换为RS232信息流格式发送给外设,并将RS232外设的数据转换为USB数据格式传送回主机。通过利用USB块传输模式和自动流量控制,PL2303HXD能够实现更高的数据传输吞吐量比传统的UART端口。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
  • x86 linux的进程调度,x86体系结构下Linux2.6.26的进程调度和切换
    进程调度相关数据结构task_structtask_struct是进程在内核中对应的数据结构,它标识了进程的状态等各项信息。其中有一项thread_struct结构的 ... [详细]
  • Kali Linux 简介
    KaliLinux是世界渗透测试行业公认的优秀的网络安全审计工具集合,它可以通过对设备的探测来审计其安全性,而且功能完备,几乎包含了目前所 ... [详细]
  • 前言整个信息技术的很多领域,都是相互关联的,IT也是一样,他们有着他们的规律,在其中摩尔定律,安迪——比尔定律,反摩尔定律组成了计算机行业的发展规律摩尔定律科技行业流传着一个 ... [详细]
  • 【技术分享】一个 ELF 蠕虫分析
    【技术分享】一个 ELF 蠕虫分析 ... [详细]
  • SpringBoot整合SpringSecurity+JWT实现单点登录
    SpringBoot整合SpringSecurity+JWT实现单点登录,Go语言社区,Golang程序员人脉社 ... [详细]
  • AstridDAO 专访:波卡稳定币黑马 BAI
    加入Pol ... [详细]
  • C#设计模式之八装饰模式(Decorator Pattern)【结构型】
    一、引言今天我们要讲【结构型】设计模式的第三个模式,该模式是【装饰模式】,英文名称:DecoratorPattern。我第一次看到这个名称想到的是另外一个词语“装修”,我就说说我对“装修”的理 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有