GMTC深圳站本周日开幕,14大专题全部上线,完整日程>> 了解详情
写点什么

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:084390

评论 1 条评论

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

第四章作业(二)

墨狂之逸才

javascript中的模块系统

程序那些事

JavaScript 程序那些事 模块系统

一文搞懂Cookie、Storage、IndexedDB

执鸢者

前端 Cookie indexedDB storage

dubbo 源码 v2.7 分析:SPI机制

程序员架构进阶

Java spi 七日更 28天写作 2月春节不断更

用例2

z

你存在我深深的脑海里——兼谈间隔效应

Justin

心理学 28天写作 游戏设计

模型评估指标-1-基础篇-FPR/TPR/F1/ROC/AUC

一直学习一直爽

机器学习 模型评估 分类模型 一直学习一直爽

【死磕JVM】五年 整整五年了 该知道JVM加载机制了!

牧小农

JVM 类加载 类加载器 类加载时机 双亲委派

c++基本语法详解

张鹤羽粑粑

28天挑战 3月日更

第五次作业

秦挺

第五周作业-第四章作业(二)

Geek_72d5ab

最值得阅读的数据仓库书籍推荐

白程序员的自习室

大数据 数据仓库 推荐书籍 数仓 构建模型

“他者”德意志(三):“翻险峰”的德国电动汽车产业

脑极体

2.2 Go语言从入门到精通:Go语言变量

xcbeyond

变量声明 28天写作 Go 语言

架构师训练营 4 期 第9周

引花眠

架构师训练营 4 期

易语言使用与研究

慕容

易语言

Deno VS Node(含Deno真实业务场景实践体验)

秋呈

软件工程 开发 deno Node

诊所数字化:诊所私域直播

boshi

直播带货 数字化医疗 七日更 28天写作

mybatis的通用插入更新方案

altantisor

Java mybatis

Java 中 Vector 和 SynchronizedList 的区别

看山

Java 线程安全 vector SynchronizedList

LeetCode题解:122. 买卖股票的最佳时机 II,动态规划,JavaScript,详细注释

Lee Chen

算法 LeetCode 前端进阶训练营

论文阅读:通过动态预测/完备在稀疏知识图谱上进行多跳推理

Alocasia

自然语言处理 深度学习 nlp 强化学习

谈学习

Ryan Zheng

学习方法

我眼中的IT售前工作

小谢同学

云计算 职场 解决方案 售前

架构设计篇之微服务实战笔记(九)

小诚信驿站

架构师 刘晓成 小诚信驿站 28天写作

SwiftUI数据流之State&Binding

kingnight_pig

ios swift SwiftUI

程序员成长第十六篇:代码重构

石云升

程序员 28天写作 2月春节不断更

产品经理训练营 - 作业五

胡小湖

Linux入门篇 —— 一文带你彻底搞懂Linux 文件权限管理

若尘

Linux 权限 linux 文件权限控制

业务中台建设 - 4种部署模式

孝鹏

部署图 隔离性 中台架构

【LeetCode】单调数列Java题解

HQ数字卡

算法 LeetCode 28天写作 2月春节不断更

2021星空论坛:破局创新,论道数字化转型

2021星空论坛:破局创新,论道数字化转型

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