返回资讯中心
外部精选
后端
#Go

Go 1.27 is released

Go 1.27 adds generic methods, encoding/json/v2 package, uuid package, faster memory allocation, goroutine leak profiles, and more.

Go BlogNicholas Husin, on behalf of the Go team9 分钟阅读

以下正文同步自 Go Blog,版权归原站所有,已转换为易读排版。

The Go Blog

Go 1.27 is released

Nicholas Husin, on behalf of the Go team

19 August 2026

Today the Go team is pleased to release Go 1.27. You can find its binary

archives and installers on the download page.

Go 1.27 brings major enhancements across the language, toolchain, runtime, and

standard library. Below are some of the key highlights.

Language changes

Go 1.27 introduces three notable updates to the

language specification.

First, generic methods are now supported. For example, see

math/rand/v2.Rand:

// Prior to Go 1.27, a separate method on Rand had to be added for each type

// (unsigned integer methods omitted for brevity).

func (r *Rand) Int32N(n int32) int32

func (r *Rand) Int64N(n int64) int64

func (r *Rand) IntN(n int) int

// Go 1.27 adds a new generic method that works for all integer types.

func (r *Rand) N[Int intType](n Int) Int

Second, a key in a struct literal may now be any

valid field selector for the struct type, allowing fields

in nested or embedded structs to be initialized directly:

type Habitat struct {

Burrow string

}

type Gopher struct {

Name string

Habitat // Embedded struct.

}

// Go 1.27 allows using Burrow as a key directly.

g := Gopher{

Name: "Gopher",

Burrow: "Burrow #42",

}

Finally, function type inference has been generalized to apply in all assignment

contexts. Generic functions can now be used without explicit type arguments in

composite literals, type conversions, and channel sends:

func GenericFormatter[T any](v T) string {

return fmt.Sprintf("value: %v", v)

}

type IntFormatter func(int) string

// Go 1.27 infers T = int in composite literals, conversions, and channel sends.

formatters := []IntFormatter{GenericFormatter}

fn := IntFormatter(GenericFormatter)

ch := make(chan IntFormatter, 1)

ch

Tool improvements

- go fix includes several new

modernizers:

atomictypes, embedlit, slicesbackward, and unsafefuncs.

- go doc now supports package@version queries such

as go doc example.com/pkg@v1.2.3.

- go mod tidy now automatically consolidates

multiple require blocks in go.mod into a standard direct and indirect

two-block structure.

Performance and runtime

- Size-specialized memory allocation

reduces small object (goroutineleak profile in

runtime/pprof is now generally available, allowing

automatic detection of permanently blocked goroutines.

Standard library additions

- encoding/json/v2 provides high-level JSON processing

with configurable options and stricter defaults, alongside

encoding/json/jsontext for low-level streaming. The

existing encoding/json package is now backed by the

v2 implementation for faster unmarshaling while maintaining backwards

compatibility.

- crypto/mldsa implements the post-quantum

ML-DSA signature scheme (FIPS 204), integrated into

crypto/x509 and crypto/tls.

- uuid provides native support for generating and

parsing UUIDs.

- simd and architecture-specific

simd/archsimd provide experimental SIMD support.

- net/http/httptest adds

NewTestServer, providing an

in-memory fake network suitable for use with the

testing/synctest package.

Please read the Go 1.27 release notes for the complete list of

changes and details.

Over the next few weeks, follow-up blog posts will cover some of the topics

relevant to Go 1.27 in more detail. Check back later to read those posts.

Thanks to everyone who contributed to this release by writing code, filing bugs,

trying out experimental additions, and testing release candidates. As always, if

you notice any problems, please file an issue.

We hope you enjoy using Go 1.27!

Next article: Generic Methods

Previous article: Introducing the pkg.go.dev API

Blog Index

正文由 FLUX 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。