网站建设流程,济南外贸网站建设公司排名,厦门官网建设公司,抖音seo招商Go官方正式发布了Go1.20稳定版 该版本依然保持 Go1 兼容性#xff0c;可以升级到 Go1.20#xff0c;而不需要做任何代码改动。
可以使用你任何喜欢的方式升级#xff1a;
比如#xff1a; go install golang.org/dl/go1.20latest
具体的可以参考官网教程#xff1a; ht… Go官方正式发布了Go1.20稳定版 该版本依然保持 Go1 兼容性可以升级到 Go1.20而不需要做任何代码改动。
可以使用你任何喜欢的方式升级
比如 go install golang.org/dl/go1.20latest
具体的可以参考官网教程 https://go.dev/doc/go1.20
或者关注我
一起学习 欢迎在CSDN私信我也欢迎 加我好友 一起学习
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包定义了三个新函数SliceData、String和StringData。与 Go 1.17 一起Slice这些函数现在提供了构建和解构切片和字符串值的完整能力而不依赖于它们的确切表示。
该规范现在定义结构值一次比较一个字段按照它们在结构类型定义中出现的顺序考虑字段并在第一个不匹配时停止。之前可以阅读规范就好像所有字段都需要比较第一个不匹配之外的字段。类似地该规范现在定义数组值按递增索引顺序一次比较一个元素。在这两种情况下差异会影响某些比较是否必须恐慌。现有程序没有改变新的规范措辞描述了实现一直所做的事情。
可比较的类型例如普通接口现在可以满足comparable约束即使类型参数不是严格可比较的比较可能会在运行时崩溃。这使得实例化受约束的类型参数comparable 例如用户定义的通用映射键的类型参数与非严格可比较的类型参数例如接口类型或包含接口类型的复合类型成为可能。
端口
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
GOOSfreebsdGo 1.20 在 RISC-V ( , GOARCHriscv64) 上添加了对 FreeBSD 的实验性支持。
工具
Go command
该目录$GOROOT/pkg不再存储标准库的预编译包存档 go install不再写入它们go构建不再检查它们Go 发行版不再运送它们。相反标准库中的包是根据需要构建的并缓存在构建缓存中就像外部的包一样GOROOT。此更改减少了 Go 发行版的大小还避免了使用 cgo 的包的 C 工具链倾斜。
实施go test -json 已得到改进使其更加健壮。运行的程序go test -json 不需要任何更新。直接调用的程序现在应该使用 例如 或而不是普通的来go tool test2json 运行测试二进制文件。 -vtest2jsongo test -vtest2json./pkg.test -test.vtest2json-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 build和go install其他与构建相关的命令现在支持-pgo启用配置文件引导优化的标志这在下面的 编译器部分中有更详细的描述。该-pgo标志指定配置文件的文件路径。指定-pgoauto会导致go命令搜索default.pgo在主包目录中命名的文件如果存在则使用它。此模式目前需要在命令行上指定一个主包但我们计划在未来的版本中取消此限制。指定-pgooff关闭配置文件引导的优化。
go build和go install其他与构建相关的命令现在支持-cover 使用代码覆盖检测构建指定目标的标志。这在下面的封面部分 中有更详细的描述 。
go version
该go version -m命令现在支持读取更多类型的 Go 二进制文件最值得注意的是使用构建的 Windows DLLgo build -buildmodec-shared 和没有执行权限的 Linux 二进制文件。
CGO
该go命令现在默认在没有 C 工具链的系统上禁用cgo。更具体地说当CGO_ENABLED环境变量未设置时环境变量未设置并且在路径中找不到 CC默认的 C 编译器通常是clang或默认为. 与往常一样您可以通过显式设置来覆盖默认值。 gccCGO_ENABLED0CGO_ENABLED
默认更改最重要的影响是当 Go 安装在没有 C 编译器的系统上时它现在将使用纯 Go 构建标准库中使用 cgo 的包而不是使用预分发的包存档有已被删除如上所述或尝试使用 cgo 并失败。这使得 Go 在一些最小的容器环境以及 macOS 上工作得更好在 macOS 上自 Go 1.16 以来预分发的包存档还没有用于基于 cgo 的包。
标准库中使用 cgo 的包有net、 os/user和 plugin。在 macOS 上net和os/user包已被重写为不使用 cgo相同的代码现在用于 cgo 和非 cgo 构建以及交叉编译的构建。在 Windows 上net和os/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.Is。 errors.As
该fmt.Errorf函数现在支持多次出现%w格式动词这将导致它返回一个包含所有这些错误操作数的错误。
新函数errors.Join 返回一个包含错误列表的错误。
HTTP 响应控制器
新 net/http.ResponseController 类型提供对接口未处理的扩展的按请求功能的 net/http.ResponseWriter访问。
以前我们通过定义ResponseWriter可以实现的可选接口例如 Flusher. 这些接口不可发现且使用起来很笨拙。
该ResponseController类型提供了一种更清晰、更易于发现的方式来添加每个处理程序的控件。Go 1.20 中还添加了两个这样的控件是 SetReadDeadline和SetWriteDeadline它们允许设置每个请求的读写截止日期。例如
func RequestHandler(w ResponseWriter, r *Request) {rc : http.NewResponseController(w)rc.SetWriteDeadline(time.Time{}) // 发送大响应时禁用 Server.WriteTimeoutio.Copy(w, 大数据)
}新的 ReverseProxy 重写hook
httputil.ReverseProxy 转发代理包括一个新的 钩子Rewrite 函数取代了以前的Director钩子。
该Rewrite挂钩接受一个 ProxyRequest参数该参数包括代理接收的入站请求和它将发送的出站请求。与Director仅对出站请求进行操作的挂钩不同这允许Rewrite挂钩避免某些情况在这些情况下恶意入站请求可能导致挂钩添加的标头在转发之前被删除。请参阅问题 #50580。
该ProxyRequest.SetURL 方法将出站请求路由到提供的目的地并取代该NewSingleHostReverseProxy功能。与 不同的NewSingleHostReverseProxy是SetURL 还设置了Host出站请求的标头。
该 ProxyRequest.SetXForwarded 方法设置出站请求的X-Forwarded-For、X-Forwarded-Host和X-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 设置GODEBUGtarinsecurepath0环境变量后 Reader.Next方法现在将返回ErrInsecurePath 文件名为绝对路径的条目的错误指的是当前目录之外的位置包含无效字符或者在 Windows 上是保留名称例如NUL. Go 的未来版本可能会默认禁用不安全的路径。 archive/zip 设置GODEBUGzipinsecurepath0环境变量后 NewReader现在将 ErrInsecurePath 在打开包含绝对路径的任何文件名的存档时返回错误指的是当前目录之外的位置包含无效字符或者在 Windows 上是保留名称例如作为NUL。Go 的未来版本可能会默认禁用不安全的路径。 从包含文件数据的目录文件中读取现在将返回错误。zip 规范不允许目录文件包含文件数据因此此更改仅影响从无效存档中读取。 bytes 新的 CutPrefixand CutSuffix函数与 and 类似TrimPrefix TrimSuffix 但也报告字符串是否被修剪。 新Clone函数分配字节切片的副本。 context 新WithCancelCause函数提供了一种方法来取消具有给定错误的上下文。可以通过调用新Cause函数来检索该错误。 crypto/ecdsa 使用支持的曲线时所有操作现在都在恒定时间内实现。这导致 CPU 时间增加 5% 到 30%主要影响 P-384 和 P-521。 新PrivateKey.ECDH方法将 an 转换ecdsa.PrivateKey为ecdh.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.PrivateKey。 ParsePKIXPublicKey 现在 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 并提供Seek、Write和WriteAt方法将其有效文件偏移位置调整固定量。 读写器 新错误 立即但成功 SkipAll 终止。WalkDir math/big math/big包 的广泛范围和依赖于输入的时序使其不适合实现密码学。标准库中的加密包不再 对攻击者控制的输入调用非平凡的Int方法。将来确定 math/big 中的错误是否被视为安全漏洞将取决于它对标准库的更广泛影响。 math/rand math/rand包 现在自动为全局随机数生成器由 和 等顶级函数使用Float64Int生成一个随机值并且顶级Seed函数已被弃用。需要可重现的随机数序列的程序应该更喜欢分配自己的随机源使用rand.New(rand.NewSource(seed)). 需要较早一致的全局播种行为的程序可以 GODEBUGrandautoseed0在其环境中设置。 顶层Read函数已被弃用。几乎在所有情况下 crypto/rand.Read都是更合适的。 mime 该ParseMediaType函数现在允许重复参数名称只要名称的值相同即可。 mime/multipart 该Reader类型的方法现在包装了底层返回的错误io.Reader。 net 该函数现在在记录存在时LookupCNAME 始终如一地返回记录的内容。CNAME以前在 Unix 系统上当使用纯 Go 解析器时如果记录引用的名称没有、 或记录LookupCNAME则会返回错误。此更改会修改 以匹配 Windows 上的先前行为从而允许在存在时成功 。 CNAMEAAAAACNAMELookupCNAMELookupCNAMECNAME Interface.Flags现在包括新标志FlagRunning表示一个可操作的活动接口。管理配置但不活动的接口例如因为未连接网络电缆将FlagUp设置但不FlagRunning。 新Dialer.ControlContext字段包含一个类似于现有Dialer.Control挂钩的回调函数它另外接受拨号上下文作为参数。 当不为零 Control时被忽略。ControlContext Go DNS 解析器识别trust-ad解析器选项。当在options trust-ad中设置时resolv.confGo 解析器将在 DNS 查询中设置 AD 位。解析器不在响应中使用 AD 位。 DNS 解析将检测更改/etc/nsswitch.conf 并在更改时重新加载文件。最多每五秒进行一次检查与之前对/etc/hosts 和的处理相匹配/etc/resolv.conf。 网络/http 该ResponseWriter.WriteHeader功能现在支持发送 1xx状态代码。 新的Server.DisableGeneralOptionsHandler配置设置允许禁用默认OPTIONS *处理程序。 当从代理接收到请求的 HTTP 响应Transport.OnProxyConnectResponse时将调用 新挂钩。 TransportCONNECT 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 类似TrimPrefix TrimSuffix 但也报告字符串是否被修剪。 同步 新Map方法Swap、 CompareAndSwap和 CompareAndDelete 允许以原子方式更新现有映射条目。 系统调用 在 FreeBSD 上FreeBSD 11 及更早版本所需的兼容性垫片已被删除。 在 Linux 上CLONE_*定义了附加常量以用于该SysProcAttr.Cloneflags字段。 在 Linux 上newSysProcAttr.CgroupFD 和SysProcAttr.UseCgroupFD字段提供了一种将子进程放入特定 cgroup 的方法。 测试 新方法B.Elapsed 报告基准的当前经过时间这可能有助于计算使用 报告的速率ReportMetric。 时间 新的时间布局常量DateTime、 DateOnly和 TimeOnly 为公共 Go 源代码调查中使用的三个最常见的布局字符串提供了名称。 新Time.Compare方法比较两次。 Parse 现在忽略其输入中的亚纳秒精度而不是将这些数字报告为错误。 该Time.MarshalJSON方法现在更加严格地遵守 RFC 3339。 统一码/utf16 新 AppendRune 函数将给定符文的 UTF-16 编码附加到 uint16 切片类似于utf8.AppendRune.