8 月 2 号,Go 团队发布了 Go 1.19,可以通过访问下载页面[1]获得该版本。
Go 1.19 改进并改进了 Go 1.18[2] , Go 1.19 的泛型开发集中在解决社区向我们报告的微妙问题和极端情况,以及重要的性能改进(某些泛型程序高达 20%)。
文档注释现在支持链接、列表和更清晰的标题语法[3]。此更改有助于用户编写更清晰、更易于导航的文档注释,尤其是在具有大型 API 的包中。作为此更改的一部分,gofmt
现在重新格式化文档注释以将标准格式应用于这些功能的使用。有关所有详细信息,请参阅“ Go Doc Comments[4] ”。
Go 的内存模型[5]现在明确定义了sync/atomic 包[6]的行为。之前发生关系的正式定义已被修改,以与 C、C++、Java、JavaScript、Rust 和 Swift 使用的内存模型保持一致。现有程序不受影响。随着内存模型的更新, sync/atomic 包中还有新的类型[7],例如atomic.Int64[8]和atomic.Pointer[T][9],以便更容易使用原子值。
出于安全原因[10], os/exec 包不再尊重 PATH 查找中的相对路径。有关详细信息,请参阅软件包文档[11] 。golang.org/x/sys/execabs[12]的现有用途可以在仅使用 Go 1.19 或更高版本构建的程序中移回 os/exec。
垃圾收集器增加了对软内存限制的支持,在新的垃圾收集指南[13]中有详细讨论。该限制对于优化 Go 程序以在具有专用内存量的容器中尽可能高效地运行特别有用。
unix
当目标操作系统 ( GOOS
) 是任何类 Unix 系统时,新的构建约束得到满足。今天,类 Unix 意味着 Go 的所有目标操作系统,除了js
、plan9
、windows
和zos
.
最后,Go 1.19 包括各种性能和实现改进,包括动态调整初始 goroutine 堆栈以减少堆栈复制、在大多数 Unix 系统上自动使用附加文件描述符、在 x86-64 和 ARM64 上用于大型 switch 语句的跳转表,支持 ARM64 上的调试器注入函数调用,RISC-V 上的寄存器 ABI 支持,以及在龙芯 64 位架构 LoongArch ( GOARCH=loong64
) 上运行的 Linux 的实验性支持。
Reference
下载页面: https://go.dev/dl/
Go 1.18: https://go.dev/blog/go1.18
[3]链接、列表和更清晰的标题语法: https://go.dev/doc/comment
[4]Go Doc Comments: https://go.dev/doc/comment
[5]Go 的内存模型: https://go.dev/ref/mem
[6]sync/atomic 包: https://go.dev/pkg/sync/atomic/
[7]sync/atomic 包中还有新的类型: https://go.dev/doc/go1.19#atomic_types
[8]atomic.Int64: https://go.dev/pkg/sync/atomic/#Int64
[9]atomic.Pointer[T]: https://go.dev/pkg/sync/atomic/#Pointer
[10]安全原因: https://go.dev/blog/path-security
[11]软件包文档: https://go.dev/pkg/os/exec/#hdr-Executables_in_the_current_directory
[12]golang.org/x/sys/execabs: https://pkg.go.dev/golang.org/x/sys/execabs
[13]新的垃圾收集指南: https://go.dev/doc/gc-guide#Memory_limit
文章评论