2022 年 3 月引起我注意的提交文件 (Go)
以下是我从golang/go的主分支提交中个人感兴趣的内容列表,本列表标题标有2022年3月,但也包括了2月的提交。
之前创建的清单在这里。
我在简要说明时可能会有误解或错误。
主题
-
- Go 1.18 がリリースされました。
Go 1.19 の開発がスタートしました。
承诺
2022年2月10日。
1.18 版本中的 debug.BuildInfo 提供的函数已经发生了变化。
在运行时处理时间分布直方图时计算桶发生了错误。该修复已经向Go 1.16.15和Go 1.17.8进行了回溯。
2022年2月11日
为了避免堆栈溢出,我们在嵌套正则表达式中添加了深度限制(1000)。这个修复还被移植到了 Go 1.16.15 和 Go 1.17.8。
另外,通过之后的修改,Go 1.19定义了新的错误。
2022年2月16日
在DNS响应大小超过512字节时,出现了“cannot unmarshal DNS”错误。通过将缓冲区大小增加到1232字节,解决了该问题。尽管RFC上对大小限制为512字节并没有问题,但由于实际环境中出现了许多问题,因此似乎增大了大小。这个修复也被回溯到了Go 1.16.15和Go 1.17.8版本。
最初是以启用EDNS(0)为默认情况进行实施,但为了考虑兼容性,只进行了缓冲区大小更改的修正,EDNS(0)的默认启用将被重新调度到Go 1.19。
2022年2月25日
Linux内核的最低要求版本已升级至2.6.32以上。这将使得我们能够删除用来支持旧内核的处理程序。
2022年3月1日 (2022 3 yuè 1 rì)
版本已从Go 1.18更改为Go 1.19。
此外,Go 1.18的开发仍在进行中,而Go 1.18的发布分支是基于Go 1.18 rc.1。因此,在将版本更改为Go 1.19之前,有13个变更已经合并到Go 1.18的发布分支中,而之后的变更将从主分支合并到Go 1.18中,只包含Go 1.18所需的内容。
2022年3月2日。
不再支持泛型的旧代码已被删除-G选项已废弃。
修复了在创建 map 字面量时初始容量很小,当项的数量超过 9 时发生容量扩展的问题。以后将从一开始就分配足够的容量来存储声明的项。
Go语言的标记解析性能似乎有所提高。
据称 utf8.Valid() 函数的性能得到了改进。
据说进行了对切片容量的重新计算的优化。
2022年3月3日
一个将固定长度的整数值编码成字节切片并添加的函数已被添加。正如在问题中所述,这样一来,输出二进制数据的操作将变得更加简单。
考虑到泛型的支持,sort包的代码生成处理已经被修改。16
2022年3月4日
Go 1.18中新增了go.work功能,但是当通过”go work init”进行初始化时,修复了之前设置”.”而不是”./.”的错误。
2022年3月8日 èr èr yuè bā rì)
对 io.MultiReader 进行了修正以实现零拷贝。
2022年3月9日
加密/rand中的Prime()函数已经简化。
只采用拒绝抽样而不再使用增量搜索的方式。
这样做有一些好处,例如减少了时序泄漏等。
2022年3月10日 èr èr yuè shí rì)
net/url包中添加了用于路径操作的JoinPath()函数。
2022年3月11日
在扩展bytes.Buffer内部缓冲区大小时进行了更改。具体地说,将原本的2*cap+n更改为len+n和2*cap的较大值,这样可以显著提高速度并减少内存消耗。
2022年3月12日
通过将编码/十六进制转换转换为基于表格的实现,该功能得到了显著加速。尽管添加了转换表,但通过简化和删除函数,对于amd64而言,二进制文件的大小也会减小。
2022年3月13日
修复了无法检测os.File.ReadAt()的竞态条件的问题。
由于单独的此提交不足以修复问题,因此还进行了额外的提交。22 23 24
2022年3月14日
新增了一个URL.OmitHost字段,用于指示网址中没有设置主机名。这在处理只有模式名和路径的URL时非常方便。
2022年3月15日【2022-03-15】
新版本新增的 API 不再记录在 api/next.txt 文件中,而是记录在 api/next/#nnnnn.txt 文件中(#nnnnn 为 GitHub Issue 编号)。
在发布时,它们会被合并并保存在 go1.XX.txt 文件中。
关于在Go 1.18中可在text/template中使用的continue和break,修复了在前后带有空格时出现错误的问题。该问题已被标记为CherryPickCandidate,但目前尚未回溯到Go 1.18版本。
2022年3月17日
有一种优化处理叫做mapclear,它可以检测和替换掉用于删除map所有元素的for循环。但在使用泛型时,这个优化处理不起作用的问题已经修复了。27
2022年3月26日
net/http/httptest 中的竞争条件问题已经修复。预计将在 Go 1.18 中进行回溯,但目前尚未完成。
现在,也可以内联包含”select”的函数。
2022年3月28日
新增了一个返回时间间隔绝对值的方法 Duration.Abs(),如果两个 time.Time 之间的差在一定时间范围内,编写处理会更加方便。
目前,已经有人提出了对两个time.Time对象进行比较大小的Time.Compare()方法,但尚未实现。
2022年3月29日。
Go 1.16 版本添加了 Deprecated: 注释,表示 io/ioutil 已经被弃用。这样一来,在文档中就能显示不推荐此用法的标记,同时 Linter 也能更容易地检测到。
如果给`bytes.Trim()`和`bytes.TrimLeft()`传递了一个空的切片,则会修正为返回`nil`而不是空切片。这是为了与Go 1.17之前的行为保持一致。
Go 1.18 这个版本已经进行了回溯,但尚未发布。34
在Unix构建标记指定时,GOOS将与类Unix系统匹配。一开始似乎打算将文件名“_unix.go”也包括在内,但由于构建过程中出现了广泛的故障,因此放弃了基于文件名的判断。
杂感
由于新的发布周期开始,已经进行了许多更改。然而,在 Go 1.18 发布之前就开始了 Go 1.19 的开发有点令人惊讶。
同时也进行了许多与泛型相关的修正。
https://github.com/golang/go/commit/1af60b2f4990bffdd1b050ffd11e978578d1e38f – 点击此处查看
https://github.com/golang/go/issues/51153 – 点击此处查看
https://github.com/golang/go/issues/6464 – 点击此处查看
https://github.com/golang/go/issues/21160 – 点击此处查看
https://github.com/golang/go/issues/44135 – 点击此处查看
https://github.com/golang/go/issues/51127 – 点击此处查看
https://github.com/golang/go/commit/301fd8ac8b6cd93708ad536eb054e1b081982a9b – 点击此处查看
https://github.com/golang/go/issues/45964 – 点击此处查看
https://github.com/golang/go/commit/6c6a8fb702fcf3c2d23dc68976a831b2bdcad03e – 点击此处查看
https://github.com/golang/go/commit/9d34fc5108d91bfcce3c465069dbb2c563af4229 – 点击此处查看
https://go-review.googlesource.com/c/go/+/389554/ – 点击此处查看
https://github.com/golang/go/issues/51336 – 点击此处查看
https://github.com/golang/go/issues/51460 – 点击此处查看
https://github.com/golang/go/issues/43020 – 点击此处查看
https://github.com/golang/go/issues/50601 – 点击此处查看
https://github.com/golang/go/issues/51448 – 点击此处查看
https://github.com/golang/go/issues/50842 – 点击此处查看
https://github.com/golang/go/issues/47005 – 点击此处查看
https://github.com/golang/go/issues/42984 – 点击此处查看
https://github.com/golang/go/commit/e475cf2e705d4eda8647426e060898ab3f643610 – 点击此处查看
https://github.com/golang/sys/commit/27bbf83dae8796c63b8dd88064c11bea9a730daa – 点击此处查看
https://github.com/golang/sys/commit/039c03cc5b867cd7b06a19ff375be5c945c80b10 – 点击此处查看
https://github.com/golang/go/issues/46059 – 点击此处查看
https://github.com/golang/go/issues/51670 – 点击此处查看
https://github.com/golang/go/issues/51699 – 点击此处查看
https://github.com/golang/go/issues/51799 – 点击此处查看
https://github.com/golang/go/issues/51414 – 点击此处查看
https://github.com/golang/go/issues/50770 – 点击此处查看
https://go.dev/doc/go1.16#ioutil – 点击此处查看
https://github.com/golang/go/issues/51927 – 点击此处查看
https://github.com/golang/go/issues/51793 – 点击此处查看
https://github.com/golang/go/commit/8b0583a05441b84a99d03daa78a24306c85cddd3 – 点击此处查看
https://github.com/golang/go/issues/51572 – 点击此处查看