AI 中文社区(简称 AI 中文社),是国内学习交流AI人工智能技术的中文社区网站,这里可获取及贡献任何AI人工智能技术,我们追求自由、简洁、纯粹、分享的多元化人工智能社区。

Go 1.22 正式发布了,性能有不少的提升!

ChatGPT · 杰作 129天前发布 · 浏览467次 · 点赞0次 · 收藏0次

2024年2月6日,Go 团队发布了 Go 1.22,你可以访问下载页面获取它。Go 1.22 带来了几个重要的新特性和改进。以下是一些值得注意的变化;有关完整列表,请参阅发布说明

语言变化:

语言变化:长期存在的for循环问题,即在迭代之间意外共享循环变量,现在已经解决。从 Go 1.22 开始,以下代码将按某种顺序打印"a"、"b"和"c":

func main() {
    done := make(chan bool)
    values := []string{"a", "b", "c"}
    for _, v := range values {
        go func() {
            fmt.Println(v)
            done <- true
        }()
    }

    // wait for all goroutines to complete before exiting
    for _ = range values {
        <-done
    }
}

有关此更改以及有助于防止代码意外中断的工具的更多信息,请参阅早期的循环变量博客文章

第二个语言变化是对遍历整数的支持:

package main
import "fmt"
func main() {
    for i := range 10 {
        fmt.Println(10 - i)
    }
    fmt.Println("go1.22 has lift-off!")
}

在这个倒计时程序中,i的值从 0 到 9(包括 0 和 9)。有关更多详细信息,请参阅规范


性能提升:

Go 运行时的内存优化将 CPU 性能提高了 1-3%,同时还将大多数 Go 程序的内存开销减少了约 1%。

在 Go 1.21 中,我们为 Go 编译器提供了基于配置文件的优化(PGO),并且该功能在不断改进。1.22 中添加的优化之一是改进的虚拟函数,允许更多的接口方法调用进行静态调度。启用 PGO 后,大多数程序将看到 2-14%的改进。


标准库的新增内容:

  • 一个新的math/rand/v2包提供了更简洁、更一致的 API,并使用了更高质量、更快的伪随机生成算法。有关更多详细信息,请参阅提案。

  • net/http.ServeMux使用的模式现在接受方法和通配符。

    例如,路由器接受类似GET /task/{id}/的模式,它只匹配 GET 请求,并将{id}段的值捕获到可以通过Request值访问的映射中。

  • database/sql中的新Null[T]类型提供了一种扫描可为空列的方法。

  • 在package slices中添加了一个Concat函数,用于连接任何类型的多个切片。

感谢所有通过编写代码和文档、提交错误、分享反馈和测试发布候选版本为本次发布做出贡献的人。你们的努力有助于确保 Go 1.22 尽可能稳定。如果你发现任何问题,请提交问题。

尽情享受 Go 1.22 吧!

Go 1.22 正式发布了,性能有不少的提升! - ChatGPT - 话题 - AI 中文社区
点赞(0) 收藏(0)
0条评论
现在评论,你将成小区里最靓的仔^_^
评论

游客
登录后再评论
  • 一字一句需斟酌,一言一语显风范。
  • 评论消耗5积分,点赞、收藏消耗3积分。