Go1.22 正式发布!包含语言变化、性能提高、标准库变动等重要特性

大家好,我是煎鱼。

今天 Go1.22 正式发布了!

一早起来,还没出门就赶紧整理了本篇文章给大家。一起学习新版本!

之前我还看进度预测 2 月中发布。没想到直接打脸。Go 核心团队成功赶在春节前发布了!真是有点猛。

Go 1.22 新版本安装方式:

Go1.22 包含多项重要的新功能和改进。以下是部分显著变化;完整列表请查看《Go 1.22 Release Notes》。

欢迎大家一起学习新版本特性和内容!

官方概述

语言变化

长期存在的 "for "循环在迭代之间意外共享循环变量的问题现已得到解决。

从 Go 1.22 开始,以下代码将按一定顺序打印 "a"、"b "和 "c":

go 复制代码
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
    }
}

有关这一变更以及有助于防止代码意外中断的工具的更多信息,请参阅之前的《Fixing For Loops in Go 1.22》。

第二个语言变化是支持整数范围:

go 复制代码
package main

import "fmt"

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

第二个语言变化是支持整数范围:a 在这个倒计时程序中,i 的取值范围为 0 至 9(含 9)。

性能提高

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

在 Go 1.21 中,我们为 Go 编译器提供了配置文件引导优化 (PGO),而且这一功能还在不断改进。

Go 1.22 中新增的优化之一是改进了虚拟化,允许静态调度更多的接口方法调用。启用 PGO 后,大多数程序的性能将提高 2% 至 14%。

标准库变动

  • 新的 math/rand/v2 软件包提供了更简洁、更一致的应用程序接口,并使用了质量更高、速度更快的伪随机生成算法。
  • net/http.ServeMux 使用的模式现在可接受方法和通配符。
    • 例如:路由器接受 GET /task/{id}/ 这样的模式,该模式只匹配 GET 请求,并在一个可通过 Request 值访问的映射中捕获 {id} 段的值。
  • database/sql 包中新增了 Null[T] 类型,为扫描可为空的列提供了一种方法。
  • 在 slices 包中添加了 Concat 函数,用于连接任意类型的多个片段。

详细解读 Go1.22 特性

文章持续更新,可以微信搜【脑子进煎鱼了】阅读,本文 GitHub github.com/eddycjy/blo... 已收录,学习 Go 语言可以看 Go 学习地图和路线,欢迎 Star 催更。

相关推荐
架构师那点事儿3 小时前
golang 用unsafe 无所畏惧,但使用不得到会panic
架构·go·掘金技术征文
于顾而言19 小时前
【笔记】Go Coding In Go Way
后端·go
qq_1728055919 小时前
GIN 反向代理功能
后端·golang·go
follycat1 天前
2024强网杯Proxy
网络·学习·网络安全·go
OT.Ter1 天前
【力扣打卡系列】单调栈
算法·leetcode·职场和发展·go·单调栈
探索云原生1 天前
GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU
ai·云原生·kubernetes·go·gpu
OT.Ter1 天前
【力扣打卡系列】移动零(双指针)
算法·leetcode·职场和发展·go
码财小子2 天前
k8s 集群中 Golang pprof 工具的使用
后端·kubernetes·go
明月看潮生5 天前
青少年编程与数学 02-003 Go语言网络编程 04课题、TCP/IP协议
青少年编程·go·网络编程·编程与数学
明月看潮生6 天前
青少年编程与数学 02-003 Go语言网络编程 03课题、网络编程协议
青少年编程·go·网络编程·编程与数学