Blog Go

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

Dmitri Shuralyov, on behalf of the Go team
13 August 2024

Hôm nay đội ngũ Go vui mừng phát hành Go 1.23, mà bạn có thể nhận được bằng cách truy cập trang tải xuống.

Nếu bạn đã cài đặt Go 1.22 hoặc Go 1.21 trên máy của mình, bạn cũng có thể thử go get toolchain@go1.23.0 trong một module hiện có. Lệnh này sẽ tải xuống toolchain mới và cho phép bạn bắt đầu sử dụng nó trong module của mình ngay lập tức. Vào một thời điểm nào đó sau này, bạn có thể tiếp tục với go get go@1.23.0 khi sẵn sàng chuyển hoàn toàn sang Go 1.23 và để phiên bản đó trở thành phiên bản Go tối thiểu mà module của bạn yêu cầu. Xem Quản lý yêu cầu phiên bản Go của module bằng go get để biết thêm thông tin về chức năng này.

Go 1.23 đi kèm với nhiều cải tiến so với Go 1.22. Một số điểm nổi bật bao gồm:

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

  • Biểu thức phạm vi trong vòng lặp “for-range” giờ đây có thể là các hàm iterator, chẳng hạn như func(func(K) bool). Điều này hỗ trợ các iterator do người dùng định nghĩa trên các chuỗi tùy ý. Có một số bổ sung cho các gói chuẩn slicesmaps hoạt động với iterator, cũng như một gói iter mới. Ví dụ, nếu bạn muốn thu thập các khóa của một map m vào một slice và sau đó sắp xếp các giá trị của nó, bạn có thể thực hiện điều đó trong Go 1.23 với slices.Sorted(maps.Keys(m)).

    Go 1.23 cũng bao gồm hỗ trợ xem trước cho bí danh kiểu generic.

    Đọc thêm về các thay đổi về ngôn ngữiterator trong ghi chú bản phát hành.

Các cải tiến về công cụ

  • Bắt đầu từ Go 1.23, toolchain Go có thể thu thập thống kê về việc sử dụng và lỗi phá vỡ để giúp hiểu cách toolchain Go được sử dụng và mức độ hoạt động hiệu quả của nó. Đây là telemetry của Go, một hệ thống opt-in. Vui lòng cân nhắc tham gia để giúp chúng tôi duy trì Go hoạt động tốt và hiểu rõ hơn về cách sử dụng Go. Đọc thêm về telemetry của Go trong ghi chú bản phát hành.
  • Lệnh go có các tiện ích mới. Ví dụ, chạy go env -changed giúp dễ dàng hơn khi chỉ xem những cài đặt có giá trị hiệu dụng khác với giá trị mặc định, và go mod tidy -diff giúp xác định các thay đổi cần thiết đối với các tệp go.mod và go.sum mà không sửa đổi chúng. Đọc thêm về lệnh Go trong ghi chú bản phát hành.
  • Tiểu lệnh go vet giờ đây báo cáo các ký hiệu quá mới so với phiên bản Go dự kiến. Đọc thêm về các công cụ trong ghi chú bản phát hành.

Cải tiến thư viện chuẩn

  • Go 1.23 cải thiện việc triển khai time.Timertime.Ticker. Đọc thêm về các thay đổi về bộ hẹn giờ trong ghi chú bản phát hành.
  • Có tổng cộng 3 gói mới trong thư viện chuẩn Go 1.23: iter, structs, và unique. Gói iter được đề cập ở trên. Gói structs định nghĩa các kiểu đánh dấu để thay đổi các thuộc tính của một struct. Gói unique cung cấp các tiện ích để chuẩn hóa (“interning”) các giá trị có thể so sánh. Đọc thêm về các gói thư viện chuẩn mới trong ghi chú bản phát hành.
  • Có nhiều cải tiến và bổ sung cho thư viện chuẩn được liệt kê trong phần các thay đổi nhỏ đối với thư viện của ghi chú bản phát hành. Tài liệu “Go, Tương thích ngược, và GODEBUG” liệt kê các thiết lập GODEBUG mới trong Go 1.23.
  • Go 1.23 hỗ trợ chỉ thị godebug mới trong các tệp go.modgo.work để cho phép kiểm soát riêng các GODEBUG mặc định và chỉ thị “go” của go.mod, bổ sung cho các chú thích chỉ thị //go:debug đã được cung cấp từ hai bản phát hành trước (Go 1.21). Xem tài liệu đã cập nhật về Giá trị GODEBUG mặc định.

Nhiều cải tiến và thay đổi hơn

  • Go 1.23 bổ sung hỗ trợ thử nghiệm cho OpenBSD trên RISC-V 64-bit (openbsd/riscv64). Có một số thay đổi nhỏ liên quan đến Linux, macOS, ARM64, RISC-V và WASI. Đọc thêm về các cổng trong ghi chú bản phát hành.
  • Thời gian xây dựng khi sử dụng tối ưu hóa dựa trên hồ sơ thực thi (PGO) được giảm xuống, và hiệu năng với PGO trên các kiến trúc 386 và amd64 được cải thiện. Đọc thêm về runtime, trình biên dịch và trình liên kết trong ghi chú bản phát hành.

Chúng tôi khuyến khích mọi người đọc ghi chú bản phát hành Go 1.23 để biết thông tin đầy đủ và chi tiết về những thay đổi này, cũng như mọi thứ khác đã được bổ sung trong Go 1.23.

Trong vài tuần tới, hãy đón đọc các bài đăng blog tiếp theo sẽ đi sâu hơn vào một số chủ đề được đề cập ở đây, bao gồm “range-over-func”, gói unique mới, các thay đổi trong triển khai bộ hẹn giờ của Go 1.23, và nhiều nội dung khác.


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ã và tài liệu, báo cáo lỗi, chia sẻ phản hồi và thử nghiệm các bản ứng viên phát hành. Những nỗ lực của các bạn đã giúp đảm bảo rằng Go 1.23 ổn định nhất có thể. Như thường lệ, nếu bạn nhận thấy bất kỳ vấn đề nào, vui lòng tạo một issue.

Chúc bạn tận hưởng Go 1.23!

Bài tiếp theo: Range Qua Các Kiểu Hàm
Bài trước: Tính ngẫu nhiên an toàn trong Go 1.22
Mục lục blog