Blog Go

Go 1.27 được phát hành

Nicholas Husin, on behalf of the Go team
19 August 2026

Hôm nay nhóm Go vui mừng bản phát hành Go 1.27. Bạn có thể tìm thấy các kho lưu trữ binary và trình cài đặt của bản phát hành này trên trang tải xuống.

Go 1.27 mang đến những cải tiến lớn trên ngôn ngữ, toolchain, runtime và thư viện chuẩn. Dưới đây là một số điểm nổi bật chính.

Các thay đổi về ngôn ngữ

Go 1.27 giới thiệu ba cập nhật đáng chú ý cho đặc tả ngôn ngữ.

Đầu tiên, các phương thức generic hiện đã được hỗ trợ. Ví dụ, xem math/rand/v2.Rand:

// Trước Go 1.27, phải thêm một phương thức riêng trên Rand cho từng kiểu
// (lược bỏ các phương thức cho số nguyên không dấu để ngắn gọn).
func (r *Rand) Int32N(n int32) int32
func (r *Rand) Int64N(n int64) int64
func (r *Rand) IntN(n int) int

// Go 1.27 thêm một phương thức generic mới hoạt động với mọi kiểu số nguyên.
func (r *Rand) N[Int intType](n Int) Int

Thứ hai, khóa trong một struct literal giờ đây có thể là bất kỳ field selector hợp lệ nào của kiểu struct, cho phép khởi tạo trực tiếp các trường trong các struct lồng nhau hoặc được nhúng:

type Habitat struct {
    Burrow string
}

type Gopher struct {
    Name    string
    Habitat // Struct được nhúng.
}

// Go 1.27 cho phép sử dụng Burrow trực tiếp làm khóa.
g := Gopher{
    Name:   "Gopher",
    Burrow: "Burrow #42",
}

Cuối cùng, suy luận kiểu của hàm đã được tổng quát hóa để áp dụng trong mọi ngữ cảnh gán. Các hàm generic giờ đây có thể được sử dụng mà không cần đối số kiểu tường minh trong các struct literal, phép chuyển đổi kiểu và thao tác gửi qua channel:

func GenericFormatter[T any](v T) string {
    return fmt.Sprintf("value: %v", v)
}

type IntFormatter func(int) string

// Go 1.27 suy luận T = int trong struct literal, phép chuyển đổi và thao tác gửi qua channel.
formatters := []IntFormatter{GenericFormatter}
fn := IntFormatter(GenericFormatter)
ch := make(chan IntFormatter, 1)
ch <- GenericFormatter

Cải tiến công cụ

  • go fix bao gồm một số modernizer mới: atomictypes, embedlit, slicesbackwardunsafefuncs.
  • go doc hiện hỗ trợ các truy vấn package@version như go doc example.com/[email protected].
  • go mod tidy hiện tự động hợp nhất nhiều khối require trong go.mod thành cấu trúc hai khối chuẩn gồm direct và indirect.

Hiệu năng và runtime

giảm chi phí cấp phát các đối tượng nhỏ (<80B) tới 30%, cải thiện hiệu năng

tổng thể khoảng ~1% đối với các chương trình có nhiều hoạt động cấp phát.

runtime/pprof hiện đã được cung cấp rộng rãi, cho phép

tự động phát hiện các goroutine bị chặn vĩnh viễn.

Các bổ sung cho thư viện chuẩn

với các tùy chọn có thể cấu hình và các giá trị mặc định nghiêm ngặt hơn,

đồng thời có encoding/json/jsontext cho việc truyền

dữ liệu streaming cấp thấp. Gói encoding/json hiện có

được hỗ trợ bởi triển khai v2 để giải mã nhanh hơn trong khi vẫn duy trì khả

năng tương thích ngược.

ML-DSA hậu lượng tử (FIPS 204), được tích hợp vào

crypto/x509crypto/tls.

  • uuid cung cấp hỗ trợ gốc cho việc tạo và phân tích

UUID.

simd/archsimd dành riêng cho từng kiến trúc cung cấp

hỗ trợ SIMD thử nghiệm.

NewTestServer, cung cấp một mạng

giả lập trong bộ nhớ phù hợp để sử dụng với gói

testing/synctest.

Vui lòng đọc ghi chú bản phát hành Go 1.27 để xem danh sách đầy đủ

các thay đổi và chi tiết.

Trong vài tuần tới, các bài đăng blog tiếp theo sẽ trình bày chi tiết hơn một số

chủ đề liên quan đến Go 1.27. Hãy quay lại sau để đọc các bài viết đó.

Cảm ơn tất cả mọi người đã đóng góp cho bản phát hành này bằng cách viết mã,

báo lỗi, dùng thử các bổ sung thử nghiệm và kiểm thử các bản ứng viên phát hành.

Như thường lệ, nếu bạn nhận thấy bất kỳ vấn đề nào, vui lòng báo cáo một issue.

Chúng tôi hy vọng bạn thích sử dụng Go 1.27!

Bài tiếp theo: Phương thức generic
Bài trước: Giới thiệu API của pkg.go.dev
Mục lục blog