Here's What You Need to Know About Go 1.22
Go 1.22发布,解决循环变量问题并支持整数范围遍历。性能优化提升CPU和内存效率。新增数学随机包、HTTP路由模式、数据库Null类型及切片拼接功能。 2025-6-15 16:0:9 Author: hackernoon.com(查看原文) 阅读量:13 收藏

Today the Go team is thrilled to release Go 1.22, which you can get by visiting the download page.

Go 1.22 comes with several important new features and improvements. Here are some of the notable changes; for the full list, refer to the release notes.

Language changes

The long-standing “for” loop gotcha with accidental sharing of loop variables between iterations is now resolved. Starting with Go 1.22, the following code will print “a”, “b”, and “c” in some order:

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
    }
}

For more information about this change and the tooling that helps keep code from breaking accidentally, see the earlier loop variable blog post.

The second language change is support for ranging over integers:

package main

import "fmt"

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

The values of i in this countdown program go from 0 to 9, inclusive. For more details, please refer to the spec.

Improved performance

Memory optimization in the Go runtime improves CPU performance by 1-3%, while also reducing the memory overhead of most Go programs by around 1%.

In Go 1.21, we shipped profile-guided optimization (PGO) for the Go compiler and this functionality continues to improve. One of the optimizations added in 1.22 is improved devirtualization, allowing static dispatch of more interface method calls. Most programs will see improvements between 2-14% with PGO enabled.

Standard library additions

  • A new math/rand/v2 package provides a cleaner, more consistent API and uses higher-quality, faster pseudo-random generation algorithms. See the proposal for additional details.

  • The patterns used by net/http.ServeMux now accept methods and wildcards.

    For example, the router accepts a pattern like GET /task/{id}/, which matches only GET requests and captures the value of the {id} segment in a map that can be accessed through Request values.

  • A new Null[T] type in database/sql provides a way to scan nullable columns.

  • A Concat function was added in package slices, to concatenate multiple slices of any type.


Thanks to everyone who contributed to this release by writing code and documentation, filing bugs, sharing feedback, and testing the release candidates. Your efforts helped to ensure that Go 1.22 is as stable as possible. As always, if you notice any problems, please file an issue.

Enjoy Go 1.22!


Eli Bendersky, on behalf of the Go team

Photo by Pawel Czerwinski on Unsplash

This article is available on The Go Blog under a CC BY 4.0 DEED license.


文章来源: https://hackernoon.com/heres-what-you-need-to-know-about-go-122?source=rss
如有侵权请联系:admin#unsafe.sh