关于go:Go120新版本正式发布新特性值得一看

6次阅读

共计 12449 个字符,预计需要花费 32 分钟才能阅读完成。

Go1.20 新版本正式公布,新个性值得一看

该版本仍然放弃 Go1 兼容性,能够降级到 Go1.20,而不须要做任何代码改变。

能够应用你任何喜爱的形式降级:

比方:
go install golang.org/dl/go1.20@latest

具体的能够参考官网教程:
https://go.dev/doc/go1.20

或者关注我:

王中阳 Go 的主页

Go 1.20 简介

最新的 Go 版本 1.20 在 Go 1.19 公布六个月后公布。它的大部分更改都在工具链、运行时和库的实现中。

判若两人,该版本放弃了 Go 1 的兼容性承诺。咱们冀望简直所有的 Go 程序都能像以前一样持续编译和运行。

内容很长,倡议先珍藏,再转发给 gopher 小伙伴们,缓缓看。

语言的变动

Go 1.20 包含对语言的四个更改。

Go 1.17 增加了从切片到数组指针的转换。Go 1.20 扩大了它以容许从切片到数组的转换:给定一个切片 x,[4]byte(x) 当初能够写成*(*[4]byte)(x).

unsafe 包定义了三个新函数 SliceDataStringStringData。与 Go 1.17 一起Slice,这些函数当初提供了构建和解构切片和字符串值的残缺能力,而不依赖于它们的确切示意。

该标准当初定义构造值一次比拟一个字段,依照它们在构造类型定义中呈现的程序思考字段,并在第一个不匹配时进行。之前能够浏览标准,就如同所有字段都须要比拟第一个不匹配之外的字段。相似地,该标准当初定义数组值按递增索引程序一次比拟一个元素。在这两种状况下,差别会影响某些比拟是否必须恐慌。现有程序没有扭转:新的标准措辞形容了实现始终所做的事件。

可比拟的类型(例如一般接口)当初能够满足 comparable 束缚,即便类型参数不是严格可比拟的(比拟可能会在运行时解体)。这使得实例化受约束的类型参数comparable(例如,用户定义的通用映射键的类型参数)与非严格可比拟的类型参数(例如接口类型或蕴含接口类型的复合类型)成为可能。

本文内容来自 golang 官网,在机器翻译的根底上进行了优化,不便大家了解。

端口

Windows

Go 1.20 是将在 Windows 7、8、Server 2008 和 Server 2012 的任何版本上运行的最初一个版本。Go 1.21 将至多须要 Windows 10 或 Server 2016。

Darwin and iOS

Go 1.20 是将在 macOS 10.13 High Sierra 或 10.14 Mojave 上运行的最初一个版本。Go 1.21 将须要 macOS 10.15 Catalina 或更高版本。

FreeBSD/RISC-V

GOOS=freebsdGo 1.20 在 RISC-V (, GOARCH=riscv64) 上增加了对 FreeBSD 的实验性反对。

工具

Go command

该目录 $GOROOT/pkg 不再存储规范库的预编译包存档:go install不再写入它们,go构建不再查看它们,Go 发行版不再运送它们。相同,规范库中的包是依据须要构建的,并缓存在构建缓存中,就像内部的包一样GOROOT。此更改缩小了 Go 发行版的大小,还防止了应用 cgo 的包的 C 工具链歪斜。

施行go test -json 已失去改良,使其更加强壮。运行的程序go test -json 不须要任何更新。间接调用的程序当初应该应用(例如,或)而不是一般的来go tool test2json 运行测试二进制文件。-v=test2json`go test -v=test2json./pkg.test` `-test.v=test2json-v`

一个相干的变动是 在每个测试程序开始执行时 go test -json 增加了一个Action 设置为的事件。start当应用命令运行多个测试时go,这些启动事件保障以与命令行中指定的包雷同的程序收回。

go 命令当初定义了体系结构性能构建标签,例如amd64.v2,以容许依据特定体系结构性能的存在或不存在来抉择包实现文件。详情请见go help buildconstraint

go子命令当初承受 在执行命令之前 将 -C <dir> 目录更改为 <dir>,这对于须要在多个不同模块中执行命令的脚本可能很有用。

go buildandgo test 命令不再承受 -i 标记,该标记自 Go 1.16 以来已 被弃用。

go generate 命令当初承受 -skip <pattern>跳过 //go:generate 匹配的指令<pattern>

go test 命令当初承受 -skip <pattern>跳过测试、子测试或匹配的示例<pattern>

当主模块位于 中 GOPATH/src 时,go install不再为非 main 包装置库 GOPATH/pkg,并且go list 不再报告 Target 此类包的字段。(在模块模式下,已编译的包仅存储在 构建缓存中,但一个谬误导致GOPATH 装置指标意外地放弃无效。)

go buildgo install 其余与构建相干的命令当初反对 -pgo 启用配置文件疏导优化的标记,这在上面的 编译器局部中有更具体的形容。该 -pgo 标记指定配置文件的文件门路。指定 -pgo=auto 会导致 go 命令搜寻 default.pgo 在主包目录中命名的文件,如果存在则应用它。此模式目前须要在命令行上指定一个主包,但咱们打算在将来的版本中勾销此限度。指定 -pgo=off 敞开配置文件疏导的优化。

go buildgo install 其余与构建相干的命令当初反对-cover 应用代码笼罩检测构建指定指标的标记。这在上面的封面局部 中有更具体的形容。

go version

go version -m 命令当初反对读取更多类型的 Go 二进制文件,最值得注意的是,应用构建的 Windows DLLgo build -buildmode=c-shared 和没有执行权限的 Linux 二进制文件。

CGO

go 命令当初默认在没有 C 工具链的零碎上禁用 cgo。更具体地说,当CGO_ENABLED 环境变量未设置时,环境变量未设置,并且在门路中找不到 CC默认的 C 编译器(通常是 clang 或),默认为. 与平常一样,您能够通过显式设置来笼罩默认值。gcc`CGO_ENABLED0CGO_ENABLED`

默认更改最重要的影响是,当 Go 装置在没有 C 编译器的零碎上时,它当初将应用纯 Go 构建规范库中应用 cgo 的包,而不是应用预散发的包存档(有已被删除,如上所述)或尝试应用 cgo 并失败。这使得 Go 在一些最小的容器环境以及 macOS 上工作得更好,在 macOS 上,自 Go 1.16 以来,预散发的包存档还没有用于基于 cgo 的包。

规范库中应用 cgo 的包有 netos/user 和 plugin。在 macOS 上,netos/user 包已被重写为不应用 cgo:雷同的代码当初用于 cgo 和非 cgo 构建以及穿插编译的构建。在 Windows 上,netos/user 包从未应用过 cgo。在其余零碎上,禁用 cgo 的构建将应用这些包的纯 Go 版本。

在 macOS 上,竞态检测器已被重写为不应用 cgo:启用竞态检测器的程序能够在没有 Xcode 的状况下构建和运行。在 Linux 和其余 Unix 零碎以及 Windows 上,须要主机 C 工具链能力应用竞争检测器。

Cover

Go 1.20 反对收集程序(应用程序和集成测试)的代码覆盖率配置文件,而不仅仅是单元测试。

要收集程序的覆盖率数据,请应用 go build-cover标记构建它,而后运行生成的二进制文件,并将环境变量 GOCOVERDIR 设置为覆盖率配置文件的输入目录。无关如何开始的更多信息,请参阅“集成测试覆盖率”登录页面。具体设计和实现见 提案。

Vet

改良了嵌套函数对循环变量捕捉的检测

该工具当初报告 在子测试函数体内 vet 调用后对循环变量的援用。T.Parallel()此类援用可能会察看来自不同迭代的变量值(通常会导致测试用例被跳过)或因为不同步的并发拜访而导致的有效状态。

该工具还在更多中央检测援用谬误。以前它只会思考循环体的最初一条语句,但当初它递归地查看 if、switch 和 select 语句中的最初一条语句。

针对谬误工夫格局的新诊断

vet 工具当初报告应用工夫格局 2006-02-01 (yyyy-dd-mm)Time.Format和 time.Parse。此格局未呈现在通用日期规范中,但在尝试应用 ISO 8601 日期格局 (yyyy-mm-dd) 时常常被谬误应用。

Runtime

一些垃圾收集器的外部数据结构被从新组织,以进步空间和 CPU 效率。此更改缩小了内存开销并将整体 CPU 性能进步了 2%。

在某些状况下,垃圾收集器在 goroutine 帮助方面体现得不太不稳固。

Go 1.20 增加了一个 runtime/coverage 蕴含 API 的新包,用于在运行时从长时间运行和 / 或不通过os.Exit().

编译器 Compiler

Go 1.20 增加了对配置文件疏导优化 (PGO) 的预览反对。PGO 使工具链可能依据运行时配置文件信息执行特定于应用程序和工作负载的优化。目前,编译器反对 pprof CPU 配置文件,能够通过惯例形式收集,例如 runtime/pprof 或 net/http/pprof包。要启用 PGO,请通过 -pgo标记将 pprof 配置文件的门路传递给go build,如上所述。Go 1.20 应用 PGO 更踊跃地在热调用站点内联函数。一组具备代表性的 Go 程序的基准显示启用配置文件疏导的内联优化可将性能进步约 3–4%。请参阅 PGO 用户指南获取具体文档。咱们打算在将来的版本中增加更多配置文件疏导的优化。请留神,配置文件疏导的优化是一个预览,因而请审慎应用。

Go 1.20 编译器降级了它的前端以应用一种新的形式来解决编译器的外部数据,它修复了几个泛型类型问题并在泛型函数和办法中启用了类型申明。

编译器当初 默认回绝带有编译器谬误的匿名接口循环。这些源于嵌入式接口的奇妙应用,并且始终存在轻微的正确性问题,但咱们没有证据表明它们的确在实践中应用过。假如没有用户报告受到此更改的不利影响,咱们打算更新 Go 1.22 的语言标准以正式禁止它们,以便工具作者也能够进行反对它们。

Go 1.18 和 1.19 的构建速度有所降落,这次要是因为减少了对泛型的反对和后续工作。Go 1.20 将构建速度进步了 10%,使其与 Go 1.17 保持一致。绝对于 Go 1.19,生成的代码性能也广泛略有晋升。

链接器 Linker

glibc 在 Linux 上,链接器当初为链接时或 musl 在链接时 抉择动静解释器。

在 Windows 上,Go 链接器当初反对古代的基于 LLVM 的 C 工具链。

Go 1.20 对编译器生成的符号应用 go:andtype: 前缀,而不是 go.and type.。这防止了名称以 . 结尾的用户包的混同go.。该debug/gosym 软件包了解应用 Go 1.20 及更新版本构建的二进制文件的新命名约定。

疏导程序 Bootstrap

当从源代码构建 Go 版本 GOROOT_BOOTSTRAP 且未设置时,以前版本的 Go 在目录中查找 Go 1.4 或更高版本的疏导工具链 $HOME/go1.4%HOMEDRIVE%%HOMEPATH%\go1.4在 Windows 上)。Go 1.18 和 Go 1.19 在回退到 之前首先寻找 $HOME/go1.17 或,以预期在疏导 Go 1.20 时须要应用 Go 1.17。Go 1.20 的确须要 Go 1.17 版本来进行疏导,但咱们意识到咱们应该采纳疏导工具链的最新点版本,因而它须要 Go 1.17.13。Go 1.20 寻找或 回退到之前$HOME/sdk/go1.17`$HOME/go1.4$HOME/go1.17.13$HOME/sdk/go1.17.13`$HOME/go1.4(以反对硬编码门路 $HOME/go1.4 但在那里装置了更新的 Go 工具链的零碎)。将来,咱们打算大概每年将疏导工具链向前挪动一次,特地是咱们预计 Go 1.22 将须要 Go 1.20 的最终版本来进行疏导。

外围库

New crypto/ecdh package

Go 1.20 增加了一个新 crypto/ecdh 包,以明确反对 NIST 曲线和 Curve25519 上的椭圆曲线 Diffie-Hellman 密钥替换。

程序应该为 ECDH 应用 crypto/ecdh 而不是低级性能 crypto/elliptic,而为更高级的用例应用第三方模块。

包装多个谬误

Go 1.20 扩大了对谬误包装的反对,容许一个谬误包装多个其余谬误。

一个谬误 e 能够通过提供一个 Unwrap 返回[]error.

和函数已更新以查看多重包装谬误 errors.Iserrors.As

fmt.Errorf 函数当初反对屡次呈现 %w 格局动词,这将导致它返回一个蕴含所有这些谬误操作数的谬误。

新函数errors.Join 返回一个蕴含谬误列表的谬误。

HTTP 响应控制器

新 "net/http".ResponseController 类型提供对接口未解决的扩大的按申请性能的 "net/http".ResponseWriter拜访。

以前,咱们通过定义 ResponseWriter 能够实现的可选接口(例如 Flusher. 这些接口不可发现且应用起来很蠢笨。

ResponseController 类型提供了一种更清晰、更易于发现的形式来增加每个处理程序的控件。Go 1.20 中还增加了两个这样的控件是 SetReadDeadlineSetWriteDeadline,它们容许设置每个申请的读写截止日期。例如:

func RequestHandler(w ResponseWriter, r *Request) {rc := http.NewResponseController(w)
  rc.SetWriteDeadline(time.Time{}) // 发送大响应时禁用 Server.WriteTimeout
  io.Copy(w, 大数据)
}

新的 ReverseProxy 重写 hook

httputil.ReverseProxy 转发代理包含一个新的 钩子 Rewrite 函数,取代了以前的Director 钩子。

Rewrite 挂钩承受一个 ProxyRequest参数,该参数包含代理接管的入站申请和它将发送的出站申请。与 Director 仅对出站申请进行操作的挂钩不同,这容许 Rewrite 挂钩防止某些状况,在这些状况下,歹意入站申请可能导致挂钩增加的标头在转发之前被删除。请参阅问题 #50580。

ProxyRequest.SetURL 办法将出站申请路由到提供的目的地并取代该NewSingleHostReverseProxy 性能。与 不同的 NewSingleHostReverseProxy 是,SetURL 还设置了 Host 出站申请的标头。

该 ProxyRequest.SetXForwarded 办法设置出站申请的 X-Forwarded-ForX-Forwarded-HostX-Forwarded-Proto标头。应用 aRewrite时,默认状况下不会增加这些标头。

Rewrite应用这些性能的挂钩 示例是:

proxyHandler := &httputil.ReverseProxy{重写:func(r *httputil.ProxyRequest) {r.SetURL(outboundURL) // 转发申请到 outboundURL。r.SetXForwarded() // 设置 X-Forwarded-* 标头。r.Out.Header.Set("X-Additional-Header", "代理设置的 header")
  },
}

ReverseProxyUser-Agent当传入申请没有时,不再向转发的申请增加标头。

library 的小改变

与平常一样,库有各种小的变动和更新,思考到 Go 1 的兼容性承诺。还有各种性能晋升,这里就不一一列举了。

  • archive/tar

    设置 GODEBUG=tarinsecurepath=0 环境变量后,Reader.Next办法当初将返回ErrInsecurePath 文件名为绝对路径的条目标谬误,指的是当前目录之外的地位,蕴含有效字符,或者(在 Windows 上)是保留名称,例如NUL. Go 的将来版本可能会默认禁用不平安的门路。

  • archive/zip

    设置 GODEBUG=zipinsecurepath=0 环境变量后,NewReader当初将 ErrInsecurePath 在关上蕴含绝对路径的任何文件名的存档时返回谬误,指的是当前目录之外的地位,蕴含有效字符,或者(在 Windows 上)是保留名称,例如作为NUL。Go 的将来版本可能会默认禁用不平安的门路。

    从蕴含文件数据的目录文件中读取当初将返回谬误。zip 标准不容许目录文件蕴含文件数据,因而此更改仅影响从有效存档中读取。

  • bytes

    新的 CutPrefixand CutSuffix函数与 and 相似TrimPrefixTrimSuffix 但也报告字符串是否被修剪。

    Clone 函数调配字节切片的正本。

  • context

    WithCancelCause 函数提供了一种办法来勾销具备给定谬误的上下文。能够通过调用新 Cause 函数来检索该谬误。

  • crypto/ecdsa

    应用反对的曲线时,所有操作当初都在恒定工夫内实现。这导致 CPU 工夫减少 5% 到 30%,次要影响 P-384 和 P-521。

    PrivateKey.ECDH 办法将 an 转换 ecdsa.PrivateKeyecdh.PrivateKey.

  • crypto/ed25519

    PrivateKey.Sign 办法和 VerifyWithOptions函数当初反对应用 Ed25519ph 对预散列音讯进行签名,由 Options.HashFunc 返回 crypto.SHA512. 他们当初还反对带有上下文的 Ed25519ctx 和 Ed25519ph,通过设置新 Options.Context 字段来批示。

  • crypto/RSA

    新字段OAEPOptions.MGFHash 容许为 OAEP 解密独自配置 MGF1 哈希。

    crypto/rsa 当初应用一个新的、更平安的、恒定工夫的后端。这会导致解密操作的 CPU 运行工夫减少大概 15%(amd64 上的 RSA-2048)和 45%(arm64 上的 RSA-4096),在 32 位架构上更多。加密操作比以前慢了大概 20 倍(但依然比解密快 5-10 倍)。性能无望在将来的版本中失去改善。程序不得批改或手动生成 的字段 PrecomputedValues

  • crypto/subtle

    新函数XORBytes 将两个字节片异或在一起。

  • crypto/TLS

    已解析的证书当初在所有被动应用该证书的客户端之间共享。在与共享其证书链的任何局部的服务器或服务器汇合建设许多并发连贯的程序中,内存节俭可能十分重要。

    对于因为证书验证失败而导致的握手失败,TLS 客户端和服务器当初返回一个新类型的谬误 CertificateVerificationError,其中包含提供的证书。

  • crypto/x509

    ParsePKCS8PrivateKey 当初 MarshalPKCS8PrivateKey 反对类型的键 *crypto/ecdh.PrivateKeyParsePKIXPublicKey 当初 MarshalPKIXPublicKey 反对类型的键*crypto/ecdh.PublicKey。解析 NIST 曲线键依然返回类型 *ecdsa.PublicKey 和的值 *ecdsa.PrivateKey。应用他们的新ECDH 办法转换为 crypto/ecdh 类型。

    SetFallbackRoots 性能容许程序定义一组备用根证书,以防操作系统验证程序或规范平台根包在运行时不可用。它最常与新包 golang.org/x/crypto/x509roots/fallback 一起应用,它将提供最新的根包。

  • debug/elf

    尝试应用当初返回 的读取器或读取器读取 SHT_NOBITS 局部 会 返回谬误。Section.DataSection.Open

    定义了其余 R_LARCH_* 常量以用于 LoongArch 零碎。

    定义了其余 R_PPC64_* 常量以用于 PPC64 ELFv2 重定位。

    的常量值 R_PPC64_SECTOFF_LO_DS 已从 61 更正为 62。

  • debug/gosym

    因为 Go 的符号命名约定产生了变动,解决 Go 二进制文件的工具应该应用 Go 1.20 的 debug/gosym 包来通明地解决新旧二进制文件。

  • debug/PE

    定义了其余 IMAGE_FILE_MACHINE_RISCV* 常量以用于 RISC-V 零碎。

  • 编码 / 二进制

    ReadVarint和 ReadUvarint 函数当初将 在 io.ErrUnexpectedEOF 读取局部值后返回,而不是io.EOF.

  • encoding/xml

    Encoder.Close 办法可用于在实现编码时查看未闭合的元素。

    解码器当初回绝具备多个冒号的元素和属性名称,例如<a:b:c>,以及解析为空字符串的命名空间,例如xmlns:a="".

    解码器当初回绝在开始和完结标记中应用不同命名空间前缀的元素,即便这些前缀都示意雷同的命名空间。

  • 谬误

    Join 函数返回一个蕴含谬误列表的谬误。

  • 调速器

    Errorf 函数反对格局动词的屡次呈现%w,返回一个谬误,该谬误解包到所有参数的列表%w

    FormatString 函数复原对应于 a 的格式化指令State,这在Formatter. 施行。

  • go/ast

    RangeStmt.Range 字段记录 range 关键字在范畴语句中的地位。

    新增的 File.FileStart andFile.FileEnd 字段记录了整个源文件的开始和完结地位。

  • go/token 令牌

    FileSet.RemoveFile 办法从FileSet. 长时间运行的程序能够应用它来开释与它们不再须要的文件关联的内存。

  • go/types

    Satisfies 函数报告类型是否满足束缚。此更改与辨别满足束缚和实现接口 的新语言语义统一。

  • IO

    OffsetWriter 包装底层 WriterAt 并提供 SeekWriteWriteAt办法,将其无效文件偏移地位调整固定量。

  • 读写器

    新谬误 立刻但胜利 SkipAll 终止。WalkDir

  • math/big

    math/big 包 的宽泛范畴和依赖于输出的时序使其不适宜实现密码学。规范库中的加密包不再 对攻击者管制的输出调用非平庸的 Int 办法。未来,确定 math/big 中的谬误是否被视为安全漏洞将取决于它对规范库的更宽泛影响。

  • math/rand

    math/rand 包 当初主动为全局随机数生成器(由 和 等顶级函数应用 Float64Int 生成一个随机值,并且顶级 Seed 函数已被弃用。须要可重现的随机数序列的程序应该更喜爱调配本人的随机源,应用rand.New(rand.NewSource(seed)).

    须要较早统一的全局收获行为的程序能够 GODEBUG=randautoseed=0在其环境中设置。

    顶层 Read 函数已被弃用。简直在所有状况下,crypto/rand.Read都是更适合的。

  • mime

    ParseMediaType 函数当初容许反复参数名称,只有名称的值雷同即可。

  • mime/multipart

    Reader 类型的办法当初包装了底层返回的谬误io.Reader

  • net

    该函数当初在记录存在时 LookupCNAME 始终如一地返回记录的内容。CNAME 以前在 Unix 零碎上,当应用纯 Go 解析器时,如果记录援用的名称没有、或记录,LookupCNAME则会返回谬误。此更改会批改 以匹配 Windows 上的先前行为,从而容许在存在时胜利。CNAME`AAAAACNAMELookupCNAMELookupCNAME`CNAME

    Interface.Flags当初包含新标记 FlagRunning,示意一个可操作的流动接口。治理配置但不流动的接口(例如,因为未连贯网络电缆)将FlagUp 设置但不FlagRunning

    Dialer.ControlContext 字段蕴含一个相似于现有 Dialer.Control 挂钩的回调函数,它另外承受拨号上下文作为参数。当不为零 Control时被疏忽。ControlContext

    Go DNS 解析器辨认 trust-ad 解析器选项。当在 options trust-ad 中设置时resolv.conf,Go 解析器将在 DNS 查问中设置 AD 位。解析器不在响应中应用 AD 位。

    DNS 解析将检测更改/etc/nsswitch.conf 并在更改时从新加载文件。最多每五秒进行一次查看,与之前对/etc/hosts 和的解决相匹配/etc/resolv.conf

  • 网络 /http

    ResponseWriter.WriteHeader 性能当初反对发送 1xx状态代码。

    新的 Server.DisableGeneralOptionsHandler 配置设置容许禁用默认 OPTIONS * 处理程序。

    当从代理接管到申请的 HTTP 响应 Transport.OnProxyConnectResponse 时,将调用 新挂钩。Transport`CONNECT`

    HTTP 服务器当初承受蕴含注释的 HEAD 申请,而不是将它们视为有效而回绝。

    函数返回的 HTTP/2 流谬误 net/http 可能会转换为 golang.org/x/net/http2.StreamError 应用 errors.As.

    前导和尾随空格从 cookie 名称中删除,而不是被回绝为有效。例如,“name =value”的 cookie 设置当初被承受为设置 cookie“name”。

  • net/netip

    new IPv6LinkLocalAllRouters andIPv6Loopback函数 net/netip 等同于 net.IPv6loopbackand net.IPv6linklocalallrouters

  • pkg

    在 Windows 上,该名称 NUL 不再被视为 和 中的 Mkdir特例 Stat

    在 Windows 上,File.Stat 当文件是目录时,当初应用文件句柄检索属性。以前它会应用传递给的门路 Open,如果文件已被挪动或替换,则该门路可能不再是文件句柄所代表的文件。此更改批改 Open 为没有拜访权限的关上目录 FILE_SHARE_DELETE,这与惯例文件的行为相匹配。

    在 Windows 上,File.Seek当初反对查找到目录的结尾。

  • 操作系统 / 执行

    Cmd 字段 Cancel并 WaitDelay 指定 Cmd 当其关联 Context被勾销或其过程退出时 I/O 管道仍由子过程放弃关上状态时的行为。

  • 门路 / 文件门路

    新谬误 立刻但胜利 SkipAll 终止。Walk

    IsLocal 函数报告门路是否是目录的词法本地门路。例如,如果 IsLocal(p)is trueOpen(p) 则将援用一个文件,该文件在词法上位于以当前目录为根的子树中。

  • 反射 reflect

    新的 Value.Comparableand Value.Equal 办法可用于比拟两个 Values 是否相等。Comparable 报告 Equal 给定 Value 接收器的操作是否无效。

    Value.Grow 办法扩大了一个切片以保障其余 n 元素的空间。

    Value.SetZero 办法将一个值设置为其类型的零值。

    Go 1.18 引入 Value.SetIterKey 和Value.SetIterValue 办法。这些是优化:v.SetIterKey(it)意味着等同于v.Set(it.Key()). 这些实现谬误地疏忽了对未优化表单中存在的未导出字段的应用查看。Go 1.20 更正了这些办法以包含未导出的字段查看。

  • 正则表达式

    Go 1.19.2 和 Go 1.18.7 蕴含对正则表达式解析器的平安修复,使其回绝会耗费过多内存的十分大的表达式。因为 Go 补丁版本没有引入新的 API,所以 syntax.ErrInternalError 在这种状况下返回的解析器。Go 1.20 增加了一个更具体的谬误,syntax.ErrLarge解析器当初返回该谬误。

  • 运行时 /cgo

    Go 1.20 增加了新的 Incomplete 标记类型。cgo 生成的代码将用于 cgo.Incomplete 标记不残缺的 C 类型。

  • 运行时 / 指标

    Go 1.20 增加了新的反对指标,包含以后 GOMAXPROCS 设置 (/sched/gomaxprocs:threads)、执行的 cgo 调用次数 (/cgo/go-to-c-calls:calls)、互斥块总工夫 (/sync/mutex/wait/total:seconds) 以及垃圾收集中破费的各种工夫度量。

    基于工夫的直方图指标当初不太准确,但占用的内存少得多。

  • 运行工夫 /pprof

    互斥配置文件样本当初已事后缩放,解决了如果采样率在执行期间发生变化,旧的互斥配置文件样本将被谬误缩放的问题。

    在 Windows 上收集的配置文件当初蕴含内存映射信息,可修复与地位无关的二进制文件的符号化问题。

  • 运行时 / 跟踪

    垃圾收集器的后盾打扫器当初产生的频率升高了,从而导致执行跟踪中的无关事件大大减少。

  • 字符串

    新的 CutPrefixand CutSuffix函数与 and 相似TrimPrefixTrimSuffix 但也报告字符串是否被修剪。

  • 同步

    Map 办法 SwapCompareAndSwap 和 CompareAndDelete 容许以原子形式更新现有映射条目。

  • 零碎调用

    在 FreeBSD 上,FreeBSD 11 及更早版本所需的兼容性垫片已被删除。

    在 Linux 上,CLONE_*定义了附加常量以用于该 SysProcAttr.Cloneflags 字段。

    在 Linux 上,newSysProcAttr.CgroupFD 和 SysProcAttr.UseCgroupFD 字段提供了一种将子过程放入特定 cgroup 的办法。

  • 测试

    新办法B.Elapsed 报告基准的以后通过工夫,这可能有助于计算应用 报告的速率ReportMetric

  • 工夫

    新的工夫布局常量 DateTimeDateOnly 和 TimeOnly 为公共 Go 源代码考察中应用的三个最常见的布局字符串提供了名称。

    Time.Compare 办法比拟两次。

    Parse 当初疏忽其输出中的亚纳秒精度,而不是将这些数字报告为谬误。

    Time.MarshalJSON 办法当初更加严格地恪守 RFC 3339。

  • 对立码 /utf16

    新 AppendRune 函数将给定符文的 UTF-16 编码附加到 uint16 切片,相似于utf8.AppendRune.

正文完
 0