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
评论 1 条评论