Phát hành Go 1.25
(go.dev)Phiên bản Go 1.25 đã chính thức được phát hành. Bản phát hành này bao gồm các cải tiến trên toàn bộ công cụ, runtime, compiler và thư viện chuẩn, đồng thời giới thiệu những tính năng thử nghiệm quan trọng để người dùng có thể trải nghiệm sớm và gửi phản hồi.
- Điểm nổi bật chính:
- Duy trì khả năng tương thích với các phiên bản Go 1
- Cải tiến diện rộng ở công cụ, runtime, compiler, thư viện và hơn thế nữa
- Bổ sung các tính năng thử nghiệm mới (GreenTea GC, gói
json/v2)
Các tính năng thử nghiệm cốt lõi
Go 1.25 bao gồm hai tính năng thử nghiệm chính nhằm nâng cao hiệu năng và cải thiện chức năng, và người dùng có thể kích hoạt chúng thông qua thiết lập biến môi trường.
Trình gom rác GreenTea (GC) mới
Mục tiêu là cải thiện hiệu năng bằng cách giảm overhead GC phát sinh khi xử lý số lượng lớn đối tượng nhỏ.
- Cách hoạt động: các đối tượng nhỏ dưới 512 byte được nhóm theo đơn vị 'memory span' 8KiB để thực hiện GC. Nhờ đó, tính cục bộ bộ nhớ (locality) được tăng lên để tối đa hóa hiệu quả CPU cache.
- Hiệu quả kỳ vọng:
- Cải thiện hiệu năng GC nhờ giảm chi phí nhảy bộ nhớ
- Hoạt động hiệu quả trong môi trường đa lõi
- Giảm overhead cấp phát đối tượng nhỏ và phân mảnh bộ nhớ
- Cách kích hoạt: đặt biến môi trường
GOEXPERIMENT=greenteagckhi build
Gói encoding/json/v2 mới
Đây là implementation JSON được thiết kế lại để giải quyết tình trạng thiếu nhất quán, hành vi khó dự đoán và các vấn đề hiệu năng của encoding/json (v1) hiện tại.
-
Mục tiêu cốt lõi:
- Nâng cao tính chính xác và khả năng dự đoán: mặc định áp dụng các quy tắc nghiêm ngặt hơn (ví dụ: phân biệt chữ hoa chữ thường, cấm khóa trùng lặp) để giảm hành vi ngoài mong đợi.
- Cải thiện hiệu năng: thiết kế lại engine parsing và encoding để tăng hiệu quả.
- Mở rộng tính linh hoạt và quyền kiểm soát: giới thiệu hệ thống tùy chọn tinh vi để lập trình viên có thể kiểm soát chi tiết cách xử lý JSON.
-
Các thay đổi chính (v2 so với v1):
- So khớp tên trường: khác với cách không phân biệt hoa thường của v1, v2 mặc định phân biệt chính xác chữ hoa chữ thường.
- Thay đổi ý nghĩa tag
omitempty: nếu v1 lược bỏ dựa trên 'trạng thái rỗng' của giá trị Go (0, false, nil...), thì v2 lược bỏ dựa trên 'trạng thái rỗng' của giá trị JSON đã được encode (null,"",{},[]). - Xử lý slice và map
nil: v1 marshal thànhnull, nhưng v2 mặc định marshal lần lượt thành[](mảng rỗng) và{}(đối tượng rỗng). - Unmarshal mảng: v1 cho phép độ dài của mảng JSON và mảng Go khác nhau, nhưng v2 yêu cầu độ dài phải khớp chính xác, nếu không sẽ trả về lỗi.
- Xử lý khóa trùng lặp: v1 cho phép khóa trùng lặp (ghi đè bằng giá trị cuối cùng), nhưng v2 mặc định trả về lỗi để tăng độ chính xác và bảo mật.
- Xử lý UTF-8 không hợp lệ: v1 tự động thay thế ký tự UTF-8 không hợp lệ bằng
\uFFFD, nhưng v2 mặc định trả về lỗi để ngăn hỏng dữ liệu.
-
Tính năng và cấu trúc mới:
- Cấu trúc mô-đun: tách phần phân tích cú pháp cấp thấp (gói
jsontext) và phần chuyển đổi ngữ nghĩa cấp cao (góijson/v2) để cải thiện độ rõ ràng của mã và hiệu năng. - Hệ thống tùy chọn mạnh mẽ: thông qua
json.Options, có thể kiểm soát chi tiết nhiều hành vi khác nhau, đồng thời cũng có thể tái hiện hoàn toàn hành vi của v1. - Xử lý kiểu từ bên ngoài: với các tùy chọn
WithMarshalers,WithUnmarshalers, có thể chèn logic tuần tự hóa/giải tuần tự hóa cho các kiểu từ package bên ngoài không triển khai interfaceMarshaler/Unmarshaler.
- Cấu trúc mô-đun: tách phần phân tích cú pháp cấp thấp (gói
-
Cách kích hoạt: đặt biến môi trường
GOEXPERIMENT=jsonv2khi build
Các thay đổi và cải tiến chính
Bản phát hành này mang đến nhiều cải tiến nhằm nâng cao năng suất phát triển và hiệu quả thực thi chương trình.
-
Runtime
- GOMAXPROCS nhận biết môi trường container: trên Linux, tự động nhận biết giới hạn CPU của cgroup để đặt giá trị mặc định cho
GOMAXPROCS, đồng thời cập nhật động khi tài nguyên CPU thay đổi. - Trace Flight Recorder: cung cấp tính năng tracing gọn nhẹ ghi liên tục runtime trace vào ring buffer trong bộ nhớ để debug các lỗi hiếm gặp.
- GOMAXPROCS nhận biết môi trường container: trên Linux, tự động nhận biết giới hạn CPU của cgroup để đặt giá trị mặc định cho
-
Công cụ và compiler
- Sửa lỗi nil pointer: lỗi compiler tồn tại từ Go 1.21 khiến việc kiểm tra nil pointer bị trì hoãn đã được sửa, vì vậy những đoạn mã từng thành công bất thường nay sẽ panic đúng như mong đợi.
- Hỗ trợ DWARF5: sử dụng DWARF phiên bản 5 cho thông tin debug để giảm kích thước binary và thời gian linking.
- Chỉ thị
go.mod ignoremới: cho phép lệnhgobỏ qua một số thư mục cụ thể.
-
Thư viện chuẩn
- Bổ sung gói
testing/synctest: gói mới hỗ trợ kiểm thử mã đồng thời, cho phép chạy test cô lập trong thời gian được ảo hóa. - Cải thiện hiệu năng gói
crypto: tốc độ kýecdsa,ed25519trong chế độ FIPS nhanh hơn 4 lần, đồng thời tốc độ băm SHA cũng được cải thiện. - Bổ sung
net/httpCrossOriginProtection: cung cấp tính năng mới dùng Fetch Metadata của các trình duyệt hiện đại để phòng vệ trước các cuộc tấn công CSRF.
- Bổ sung gói
Thay đổi về cổng và hỗ trợ
- macOS: từ Go 1.25, yêu cầu macOS 12 Monterey trở lên.
- Windows: cổng 32-bit
windows/armsẽ ngừng được hỗ trợ sau bản phát hành này.
Chưa có bình luận nào.