写点什么

Go 1.17 发布,说好的支持泛型又落空

  • 2021 年 8 月 26 日
  • 本文字数:1292 字

    阅读完需:约 4 分钟

Go 1.17 发布,说好的支持泛型又落空

2021 年 8 月 16 日,Go 团队发布 Go 1.17,您可以通过访问下载页面获得此版本为编译器带来了额外的改进,即传递函数参数和结果的新方法。这一变化表明,Go 程序的性能提高了约 5%,amd64 平台的二进制文件大小减少了约 2%。未来版本将支持更多平台。

 

Go1.17 增加了 Windows/ARM64 的支持。在这个版本中引入了修剪过的模块图。在 go.mod 文件中指定 Go 1.17 或更高版本的模块,其模块图仅包含其他 Go 1.17 模块的直接依赖关系,而不包含其传递依赖关系。这有助于避免需要下载或读取 go.mod 文件,可节省日常开发的时间。

Go 1.17 发布内容

 

Go 1.17 对语言进行了三个小改动。

 

  • 从切片到数组指针的转换。类型为[]T 的表达式 s 现在可以转换为数组指针类型*[N]T 。如果 a 是这种转换的结果,那么在范围内的相应指数指的是相同的底层元素:&a[i] == &s[i]对于 0 <= i < N 。如果 len(s) 小于 N ,则转换会陷入困境。

  • unsafe.Add:unsafe.Add(ptr, len) 将 len 添加到 ptr 并返回更新的指针 unsafe.Pointer(uintptr(ptr) + uintptr(len)) 。

  • unsafe.Slice: 对于类型为*T 的表达式 ptr ,unsafe.Slice(ptr, len) 返回一个类型为[]T 的切片,其底层数组从 ptr 开始,其长度和容量为 len 。


添加这些增强功能是为了简化编写符合 unsafe.Pointer"安全规则"的代码,但这些规则保持不变。特别是,正确使用 unsafe.Pointer 的现有程序仍然有效,而新程序在使用 unsafe.Add 或 unsafe.Slice 时仍然必须遵循这些规则。

 

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

Go 泛型提案进展

 

Go 团队核心成员 Ian Lance Taylor 在今年年初宣布已提交为 Go 添加泛型的提案。Ian 在博客说道:“为 Go 添加泛型的语言变更完全向后兼容 (fully backward compatible),现有的 Go 程序会继续像现在一样正常运行。”

 

泛型草案设计概要

 

  • 函数可以使用带方括号的类型参数列表,类型参数列表的其他方面和普通参数列表一样: func F[T any](p T) { ... }

  • 这些类型参数可以被常规参数使用,也可以在函数体中使用

  • 类型 (Types) 也可以使用类型参数列表: type M[T any] []T

  • 每个类型参数都有一个类型约束,正如普通参数都有一个类型:func F[T Constraint](p T) { ... }

  • 类型约束属于接口类型

  • 新的预声明名称 any 是允许任何类型的类型约束

  • 用作类型约束的接口类型可以使用预声明类型的列表;只有与这些类型之一相匹配的类型参数才能满足约束条件

  • 泛型函数只能使用其类型约束所允许的操作

  • 使用泛型函数或类型需要传递类型参数

  • 在通常情况下,类型推断允许省略函数调用的类型参数

 

 Go 团队本来预计在 Go 1.17 中添加泛型,但很遗憾告诉大家,又要推迟了。对于推迟的泛型提案,Go Team 也在其官方博客表示,大家很期待泛型,因此他们一直在努力,为可投入使用做各种细节的打磨,2021 年这块会是重点。目标是 2021 年底,在 Go1.18 的 Beta 中让大家体验,因此不出意外泛型会在 Go1.18 实现,大家可拭目以待。

 

参考链接:

https://blog.golang.org/go1.17

https://blog.csdn.net/weixin_39589644/article/details/111248116

2021 年 8 月 26 日 10:084741

评论 1 条评论

发布
用户头像
这翻译太不走心了。。。
2021 年 08 月 26 日 11:04
回复
没有更多了
发现更多内容

阿里大牛耗时三年整理出来的4588页Java面试诛仙手册,已全面开源

Java~~~

Java 架构 面试 JVM 架构师

聊聊 Kafka: 在 Linux 环境上搭建 Kafka

编程susu

Java IT 计算机 编程开发 技术宅

Github高分爆赞,一天遭狂转 10w+ 次!20万字的Java面试手册来了

Java~~~

Java 架构 面试 JVM 架构师

终于读完谷歌高级架构师分享的Kubernetes源码剖析文档

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

记一次10人跨组织、跨地域的开源协作经历

腾源会

开源 腾讯 腾讯开源

币安智能链智能合约DAPP开发|智能合约DAPP源码搭建

量化系统19942438797

dapp 币安智能链

币安智能链智能合约DAPP开发

Geek_23f0c3

智能合约 DAPP智能合约交易系统开发 DAPP系统开发 币安智能链

ToB迎来上市潮,谁是下一个IPO黑马?

ToB行业头条

IPO

BATJ高级Java面试题分享:JVM+Redis+Kafka +数据库+设计模式

Crud的程序员

Java 程序员 架构 编程语言

使用 GitHub Issues 来写博客,真香。

彭宏豪95

GitHub 写作 博客

人类高质量 Java 学习路线【一条龙版】

程序员鱼皮

Java 数据库 后端 求职 编程学习

2021年8月数据库流行度排行:数据库道路漫漫其修远兮,为用户创造核心价值是正道

墨天轮

数据库 TiDB oceanbase 国产数据库 达梦

Java开发两年备战金九银十:多线程+IO+集合+锁+JVM+数据库+框架

Crud的程序员

Java 架构 编程语言

三面蚂蚁金服,分享面试经历总结(已拿offer)

Crud的程序员

Java 架构 面试 编程语言

基于java springboot vue活动报名系统源码(毕设)

清风

Java springboot elementUI 毕业设计

超赞!GitHub上百万下载量Java面试手册!颠覆你的认知

Java~~~

Java 架构 面试 网络 架构师

深度解读鸿蒙轻内核CPU占用率

华为云开发者社区

鸿蒙 cpu 任务 CPUP LiteO

NodeJs深入浅出之旅:模块🌀

空城机

大前端 Node 8月日更

双非本科,面试两个月成功收获阿里、美团等6个offer,经验分享

互联网架构师小马

云小课|MRS基础原理之ClickHouse组件介绍

华为云开发者社区

mapreduce 开源 Clickhouse EI企业智能 列式数据库

阿里P8耗时一个月肝出这份26W字Java面试手册,在Github标星30K+

Java~~~

Java spring 架构 面试 JVM

全靠这份阿里大佬的“Java进阶面试手册”收获蚂蚁offer

Java~~~

Java 架构 面试 算法 JVM

Flutter 与 Swift - 在创建 iOS 应用程序时应该押注什么技术?

iOSer

flutter swift ios开发

GitHub再现神作,阿里大牛面试30家大厂,整合出这份Java面试手册

Java~~~

Java 架构 面试 JVM 架构师

鲲鹏基础软件开发赛道openLooKeng赛题火热报名中,数十万大奖等您来收割

华为云开发者社区

鲲鹏 openLooKeng

“性能混合架构”了解了吗?英特尔Alder Lake惊艳来袭

科技新消息

上线半天下载量破100W!美团内部微服务进阶笔记,超详细

Java 架构 面试 微服务 美团

万物皆为向量:在线向量召回工程服务化实践

爱奇艺技术产品团队

深度学习 推荐 向量

百度、小米、美团、58、360等一线互联网公司面试题合集(Java)

程序员改bug

Java 编程 架构 面试

如何在Android 8.0以下高效地复用图片?

爱奇艺技术产品团队

android 开发 图片存储

图解:为什么非公平锁的性能更高?

Java 程序员 面试 后端 计算机

Go 1.17 发布,说好的支持泛型又落空-InfoQ