Go 1.20 RC1 发布


Go 1.20 首个 RC 已发布,正式版计划明年 2 月推出。

下载地址:https://go.dev/dl/#go1.20rc1

值得注意的是,Go 1.20 是最后一个支持在 macOS 10.13 High Sierra 或 10.14 Mojave 上运行的版本。Go 1.21 将需要 macOS 10.15 Catalina 或更高版本。

此外,Go 1.20 添加了对 RISC-V 上的 FreeBSD (GOOS=freebsd, GOARCH=riscv64) 的实验性支持。

Go 1.20 目前在语法方面包含 4 项变化。

  • 从 slice(切片)到数组的转换

Go 1.7 增加了从 slice (切片)到数组指针转换的功能,Go 1.20 对该功能进行了扩展——可直接从 slice 转换成数组。

比如给定一个 slicex[4]byte(x)可以写成*(*[4]byte)(x)

s := make([]byte, 2, 4)

a0 := [0]byte(s)
a1 := [1]byte(s[1:]) // a1[0] == s[1]
a2 := [2]byte(s) // a2[0] == s[0]
a4 := [4]byte(s) // panics: len([4]byte) > len(s)

s0 := (*[0]byte)(s)// s0 != nil
s1 := (*[1]byte)(s[1:])// &s1[0] == &s[1]
s2 := (*[2]byte)(s)// &s2[0] == &s[0]
s4 := (*[4]byte)(s)// panics: len([4]byte) > len(s)

var t []string
t0 := [0]string(t) // ok for nil slice t
t1 := (*[0]string)(t)// t1 == nil
t2 := (*[1]string)(t)// panics: len([1]string) > len(t)

u := make([]byte, 0)
u0 := (*[0]byte)(u)// u0 != nil
  • 标准库unsafe包定义了 3 个新函数:SliceData,StringStringData

在 Go 1.17 中,unsafe包添加了 Slice 函数:

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

再加上 Go 1.20 新定义的 3 个函数,这 4 个函数提供了构造和解构 slice 以及字符串值的完整功能。

详情查看 https://tip.golang.org/ref/spec/#Package_unsafe。

  • Comparable 类型

Comparable 类型(例如普通接口 ordinary interfaces)现在可以满足comparable约束,即便类型实参 (type argument) 不是严格可比较类型。

  • 值比较

Go 语言规范进行了更新,结构体变量的值每次只比较一个字段,字段比较的顺序和字段在结构体里定义的顺序保持一致。一旦某个字段的值比较出现不一致,就会马上停止比较。

该变化没有对代码造成影响。

最后,由于 Go 1.20 尚处于开发阶段,目前公开的 Release Notes 也是草案状态。


相關推薦

2022-12-05

(errs ...error) error 目前该提案已被接受,作者表示将在 Go 1.20 中提供: 详情查看 https://github.com/golang/go/issues/53435。

2022-07-15

Go 1.19 发布了第一个 RC 版本,正式版预计在 8 月推出。 主要变化 针对“泛型”的 Bugfix 更新内存模型,与 C、C++、Java、JavaScript、Rust 和 Swift 使用的内存模型保持一致 Go 1.19 在启动时将默认提高打开文件的限制值 Go 1.19

2023-06-10

个系统的,并且它是安全且私密的。 Syncthing v1.23.5 现已发布,具体更新内容如下: Bug 修复 #8503:"syncthing cli config devices add" 在使用 -addresses flag 是 reflect error #8764:在文件夹添加过程中创建的 Ignore patterns 不被加载 #8778:

2024-08-20

【文件传输工具】trzsz ( trz / tsz ) 发布 v1.1.8,支持后台传输,只要加上 -f 参数即可,如 trz -f 和 tsz -f xxx。 服务端开源 GitHub:https://github.com/trzsz/trzsz-go 客户端开源 GitHub:https://github.com/trzsz/trzsz-ssh 服务端安装方法 Ubuntu

2023-02-21

TinyGo 0.27.0 已发布。 TinyGo 是一个 Go 编译器,旨在用于微控制器,WebAssembly(WASM)和命令行工具等小型场景。它重用了 Go 语言工具和 LLVM 一起使用的库,以提供编译用 Go 编程语言编写的程序的另一种方法。 下面是一个示例程

2023-07-12

【 用 go 的 ssh 客户端 】tssh 发布 v0.1.6,解决了 known hosts 的问题,支持更多类型的私钥( 含密码 )。 GitHub:https://github.com/trzsz/trzsz-ssh Gitee:https://gitee.com/trzsz/tssh 安装方法 客户端安装 trzsz-ssh ( tssh ) 的方法

2023-07-18

Go 版 trzsz ( trz / tsz ) 发布 v1.1.4,支持断点续传,进一步优化了传输速度和使用体验: 1 、如果传输发生中断,或者传完后文件有修改,再使用 trz -y 上传,或者使用 tsz -y xxx 下载, 将会快速跳过前面一致的部分

2023-06-05

你是否曾经因为服务器太多记不住,而喜欢的 ssh 终端又没有服务器管理功能而苦恼? tssh v0.1.1 已实现 ssh 客户端常用的基本功能( 除了 ssh 端口转发 ),一般人用到的 ssh 功能都已支持,欢迎各位大佬试用。 两大额外功能

2023-07-05

trzsz-ssh ( tssh ) 发布 v0.1.5,新版本支持记住密码、记住 keyboard interactive 的答案自动登录。 你是否曾经因为服务器太多记不住,而喜欢的 ssh 终端又没有服务器管理功能而苦恼? tssh 支持选择( 搜索 ) ~/.ssh/config 中配

2022-10-21

进行创新。 值得一提的是,Google Open Source 官方一开始发布的的公告内容是:"谷歌向 CNCF 捐赠了用于简单快速安全的容器镜像构建的 KO 工具"。不过这篇原始贴很快就被删除,并以一个新的、稍有分寸的标题重新发布:"KO 申

2023-07-19

Go 实现的 ssh 客户端,发布 v0.1.7 新版本,升级 trzsz ( trz / tsz ) 到 1.1.4 版本,支持断点续传,进一步优化了传输速度和使用体验: 1 、如果传输发生中断,或者传完后文件有修改,再使用 trz -y 上传,或者使用 tsz -y xx

2022-10-17

持 GraphQL 作为查询语言,响应 JSON。 Dgraph v22.0.0-RC1 现已发布,v22.0.0 是基于 v21.03.2 所发布的。官方警告称,他们将停止对 v21.12.0 的支持。 本次具体更新内容如下: Fixed GraphQL fix(GraphQL):优化 eq 过滤器查询 ( #7895 

2023-06-19

tssh v0.1.3 发布,支持指定多个私钥,支持使用密码保护的私钥。 GitHub:https://github.com/trzsz/trzsz-ssh Gitee:https://gitee.com/trzsz/tssh 你是否曾经因为服务器太多记不住,而喜欢的 ssh 终端又没有服务器管理功能而苦恼? tssh 支持选

2023-07-24

Go 实现的 ssh 客户端,发布 v0.1.8 新版本,支持批量登录,批量执行指定的命令。 GitHub:https://github.com/trzsz/trzsz-ssh Gitee:https://gitee.com/trzsz/tssh 目前支持在 tmux 和 Windows Terminal 中一次选择多台服务器,批量登