Phiên bản mới của ngôn ngữ Go, phiên bản 1.24, ra mắt sau sáu tháng Go 1.23. Hầu hết các thay đổi đều nằm ở việc triển khai chuỗi công cụ, thời gian chạy và thư viện. Như thường lệ, bản phát hành cung cấp lời hứa về sự tương thích Đi 1. Các nhà thiết kế ngôn ngữ mong đợi rằng hầu hết các chương trình Go sẽ tiếp tục biên dịch và chạy như trước.
Những thay đổi về ngôn ngữ
Go 1.24 hiện hỗ trợ đầy đủ bí danh loại chung: một bí danh kiểu có thể được tham số hóa như một kiểu đã khai báo. Chi tiết trong thông số kỹ thuật ngôn ngữ. Hiện tại, tính năng này có thể bị vô hiệu hóa bằng cách thiết lập GOEXPERIMENT=noaliastypeparams; Tuy nhiên, tùy chọn aliastypeparams sẽ bị loại bỏ trong Go 1.25.
Dụng cụ
Lệnh đi
Các mô-đun Go hiện có thể theo dõi các phụ thuộc có thể thực thi bằng cách sử dụng lệnh tool trong go.mod. Điều này loại bỏ nhu cầu áp dụng giải pháp thay thế trước đây là thêm công cụ dưới dạng mục nhập trống trong tệp thường được gọi là “tools.go”. Lệnh go tool hiện có thể chạy các công cụ này ngoài các công cụ có sẵn trong Go. Có thể tìm thấy thêm thông tin tại tài liệu.
Cờ -tool mới cho lệnh go get sẽ khiến các lệnh tool được thêm vào mô-đun hiện tại cho các gói được chỉ định ngoài việc thêm các lệnh require.
mới công cụ meta-pattern đề cập đến tất cả các công cụ trong mô-đun hiện tại. Bạn có thể sử dụng công cụ này để cập nhật tất cả các phiên bản thông qua công cụ go get hoặc cài đặt chúng vào thư mục GOBIN của mình thông qua công cụ go install.
Các tệp thực thi được tạo thông qua lệnh go run và hành vi công cụ go mới hiện được lưu trong bộ đệm dựng Go. Điều này giúp có thể khởi chạy nhiều lần do bộ nhớ đệm được tăng lên. #69290.
Các lệnh go build và go install hiện chấp nhận cờ -json, cờ này báo cáo kết quả dựng và lỗi dưới dạng đầu ra JSON có cấu trúc trên đầu ra tiêu chuẩn. Chi tiết định dạng có thể được xem trong go help buildjson.
Hơn nữa, go test -json hiện báo cáo lỗi đầu ra và lỗi biên dịch dưới dạng JSON, kết hợp với kết quả kiểm tra JSON. Chúng có thể được phân biệt bằng các loại Hành động mới, nhưng nếu chúng gây ra sự cố trong hệ thống tích hợp thử nghiệm, bạn có thể quay lại đầu ra văn bản của bản dựng thông qua Thiết lập GODEBUG gotestjsonbuildtext=1.
Biến môi trường GOAUTH mới cung cấp một cách linh hoạt để cho phép kéo mô-đun riêng tư. Bạn có thể xem chi tiết trong go help goauth.
Lệnh go build hiện đã được cài đặt phiên bản của mô-đun chính trong tệp nhị phân đã biên dịch, dựa trên thẻ và/hoặc cam kết kiểm soát phiên bản. Hậu tố +dirty sẽ được thêm vào nếu có những thay đổi chưa được cam kết. Cờ -buildvcs=false có thể được sử dụng để bỏ qua thông tin kiểm soát phiên bản khỏi tệp nhị phân.
New Thiết lập GODEBUG toolchaintrace=1 giờ đây có thể được sử dụng để theo dõi quá trình lựa chọn chuỗi công cụ trong lệnh go.
Cgo
Cgo hỗ trợ chú thích mới cho các hàm C để cải thiện hiệu suất thời gian chạy. #cgo noescape cFunctionName thông báo cho trình biên dịch rằng bộ nhớ được truyền cho hàm C cFunctionName không được thoát. #cgo nocallback cFunctionName cho trình biên dịch biết rằng hàm C cFunctionName không gọi lại bất kỳ hàm Go nào. Có thể tìm thấy thêm thông tin tại tài liệu cgo.
Hiện tại, Cgo từ chối biên dịch các lệnh gọi đến hàm C có nhiều khai báo không tương thích. Ví dụ, nếu f được khai báo là void f(int) và void f(double), cgo sẽ báo lỗi thay vì có thể tạo ra chuỗi gọi không hợp lệ f(0). Phiên bản này có tính năng mới là cải thiện khả năng phát hiện tình trạng lỗi này khi các khai báo không tương thích xuất hiện trong các tệp khác nhau. #67699.
Objdump
Công cụ objdump hiện hỗ trợ phân tách trên LoongArch 64-bit (GOARCH=loong64), RISC-V (GOARCH=riscv64) và S390X (GOARCH=s390x).
Fat
Công cụ phân tích thử nghiệm mới báo cáo các lỗi thường gặp trong các khai báo thử nghiệm, fuzzer, benchmark và ví dụ trong bộ thử nghiệm, chẳng hạn như tên không đúng định dạng, chữ ký không hợp lệ hoặc ví dụ ghi lại các mã định danh không tồn tại. Một số lỗi này có thể khiến bài kiểm tra không thành công.
Trình phân tích cú pháp printf hiện tại hiện báo cáo chẩn đoán cho các lệnh gọi có dạng fmt.Printf(s), trong đó s là chuỗi định dạng không cố định và không có đối số nào khác. Những lệnh gọi như vậy hầu như luôn luôn là lỗi, vì giá trị của s có thể chứa ký tự %; thay vào đó hãy sử dụng fmt.Print. 60529. Kiểm tra này có xu hướng tìm kiếm những thứ trong mã hiện có và do đó chỉ được áp dụng khi phiên bản ngôn ngữ (như được chỉ định bởi lệnh go của tệp go.mod hoặc chú thích `//go:build`) ít nhất là Go 1.24 để tránh gây ra tình trạng gián đoạn tích hợp kéo dài khi nâng cấp lên chuỗi công cụ Go 1.24.
Trình phân tích buildtag hiện tại hiện báo cáo chẩn đoán khi có buildtag không chính xác giới hạn xây dựng phiên bản cũ hơn Đi vào lệnh //go:build. Ví dụ, //go:build go1.23.1 đề cập đến bản phát hành điểm; thay vào đó hãy sử dụng //go:build go1.23. #64127.
Trình phân tích copylock hiện tại hiện báo cáo chẩn đoán khi một biến được khai báo trong vòng lặp “for” ba lần, chẳng hạn như for i := iter(); xong(i); i = next(i) { … }, chứa sync.Locker, chẳng hạn như sync.Mutex. Go 1.22 thay đổi hành vi của các vòng lặp như vậy để tạo ra một biến mới cho mỗi lần lặp, sao chép các giá trị từ lần lặp trước đó; Việc sao chép này không an toàn cho khóa. #66387.
GOCACHEPROG
Cơ chế bộ nhớ đệm thử nghiệm và nhị phân cmd/go nội bộ hiện có thể được triển khai bằng các tiến trình con thực hiện giao thức JSON giữa công cụ cmd/go và tiến trình con được đặt tên theo biến môi trường GOCACHEPROG. Trước đây là dành cho GOEXPERIMENT. Chi tiết của giao thức có thể được xem trong tài liệu.
Thời gian hoàn thành
Một số cải tiến về hiệu suất thời gian chạy đã giúp giảm chi phí CPU trung bình từ 2-3% trên một loạt các điểm chuẩn tiêu biểu. Kết quả có thể khác nhau tùy theo ứng dụng. Những cải tiến này bao gồm một bản đồ tích hợp mới dựa trên Bảng Thụy Điển, phân bổ bộ nhớ đối tượng nhỏ hiệu quả hơn và triển khai thời gian chạy nội bộ mới của mutex.
Có thể vô hiệu hóa việc triển khai bản đồ tích hợp mới và mutex thời gian chạy nội bộ mới bằng cách đặt GOEXPERIMENT=noswissmap và GOEXPERIMENT=nospinbitmutex tại thời điểm xây dựng.
Trình biên dịch
Trình biên dịch đã cấm việc xác định các phương thức mới với các kiểu máy thu được tạo bởi cgo, nhưng có thể giải quyết hạn chế này thông qua một bí danh kiểu. Go 1.24 hiện luôn báo lỗi nếu người nhận biểu thị kiểu do cgo tạo ra, trực tiếp hoặc gián tiếp (thông qua bí danh kiểu).
Liên kết
Trình liên kết hiện tạo ra một mã định danh bản dựng GNU (mục ELF NT_GNU_BUILD_ID) trên nền tảng ELF và một UUID (lệnh tải Mach-O LC_UUID) trên macOS theo mặc định. ID bản dựng hoặc UUID được lấy từ ID bản dựng Go. Bạn có thể tắt tùy chọn này bằng cờ liên kết -B none hoặc ghi đè bằng cờ liên kết -B 0xNNNN với giá trị thập lục phân do người dùng chỉ định.
Khuyến mãi
Như đã nêu trong Ghi chú phát hành Go 1.22, Go 1.24 hiện yêu cầu phải cài đặt Go 1.22.6 trở lên. Các nhà phát triển dự kiến Go 1.26 sẽ yêu cầu bản phát hành Go 1.24 hoặc phiên bản mới hơn để có thể triển khai.
Thư viện chuẩn
Truy cập hệ thống tập tin bị hạn chế thư mục
Kiểu mới os.root Cung cấp khả năng thực hiện các hoạt động hệ thống tập tin trong một thư mục cụ thể.
Chức năng hệ điều hành OpenRoot mở thư mục và trả về os.root. Phương pháp trên os.root hoạt động trong thư mục đó và không cho phép đường dẫn tham chiếu đến các vị trí bên ngoài thư mục, bao gồm cả các đường dẫn theo liên kết tượng trưng bên ngoài thư mục. Các phương thức trên os.Root phản ánh hầu hết các hoạt động của hệ thống tập tin có sẵn trong gói os, bao gồm, ví dụ, os.Root.Mở, os.Root.Create, os.Root.Mkdir и os.Root.Stat.
Tính năng chuẩn mực mới
Điểm chuẩn hiện có thể sử dụng phương pháp nhanh hơn, ít lỗi hơn kiểm tra.B.Loop để lặp lại một điểm chuẩn như đối với b.Loop() { … } thay vì các cấu trúc vòng lặp thông thường liên quan đến bN như đối với phạm vi bN Điều này mang lại hai lợi thế đáng kể:
- Chức năng chuẩn được thực hiện chính xác một lần cho mỗi lần đếm, do đó các bước thiết lập và dọn dẹp tốn kém chỉ được thực hiện một lần.
- Các tham số và kết quả gọi hàm vẫn tồn tại, ngăn trình biên dịch tối ưu hóa hoàn toàn thân vòng lặp.
Cải thiện trình hoàn thiện
Tính năng mới thời gian chạy.AddCleanup là một cơ chế hoàn thiện linh hoạt hơn, hiệu quả hơn và ít xảy ra lỗi hơn thời gian chạy.SetFinalizer. AddCleanup gắn một hàm dọn dẹp vào một đối tượng sẽ được chạy ngay khi đối tượng không còn khả dụng. Tuy nhiên, không giống như SetFinalizer, nhiều lệnh dọn dẹp có thể được đính kèm vào một đối tượng duy nhất, các lệnh dọn dẹp có thể được đính kèm vào các con trỏ bên trong, các lệnh dọn dẹp thường không gây rò rỉ khi các đối tượng tạo thành một chu kỳ và các lệnh dọn dẹp không làm chậm quá trình giải phóng đối tượng hoặc các đối tượng mà nó trỏ tới. Mã mới nên ưu tiên AddCleanup hơn SetFinalizer.
Gói yếu mới
Gói mới yếu cung cấp những con trỏ yếu.
Con trỏ yếu là nguyên thủy cấp thấp được cung cấp để tạo các cấu trúc tiết kiệm bộ nhớ như từ điển yếu để ánh xạ giá trị, từ điển chuẩn hóa cho bất kỳ thứ gì không được gói bao phủ. độc đáovà nhiều loại bộ nhớ đệm khác nhau. Để hỗ trợ các trường hợp sử dụng này, bản phát hành này cũng cung cấp thời gian chạy.AddCleanup и maphash.Có thể so sánh.
Gói crypto/mlkem mới
Gói mới tiền điện tử/mlkem thực hiện ML-KEM-768 và ML-KEM-1024.
ML-KEM là một cơ chế trao đổi khóa hậu lượng tử, trước đây được gọi là Kyber và được chỉ định trong Trin 203.
Các gói mới crypto/hkdf, crypto/pbkdf2 và crypto/sha3
Gói mới tiền điện tử/hkdf triển khai hàm dẫn xuất khóa “Trích xuất và Mở rộng” dựa trên HMAC HKDF như được định nghĩa trong RFC 5869.
Gói mới tiền điện tử/pbkdf2 thực hiện chức năng dẫn xuất khóa dựa trên mật khẩu PBKDF2 như được định nghĩa trong RFC 8018.
Gói mới crypto / sha3 thực hiện hàm băm SHA-3 và các hàm đầu ra mở rộng SHAKE và cSHAKE như được định nghĩa trong Trin 202.
Cả ba gói đều dựa trên các gói golang.org/x/crypto/… hiện có.
Tuân thủ FIPS 140-3
Bản phát hành này bao gồm một bộ cơ chế mới để đảm bảo tuân thủ FIPS 140-3.
Mô-đun mã hóa Go là một tập hợp các gói thư viện tiêu chuẩn nội bộ được sử dụng một cách minh bạch để triển khai các thuật toán được FIPS 140-3 chấp thuận. Các ứng dụng không yêu cầu thay đổi để sử dụng mô-đun mã hóa Go cho các thuật toán đã được chấp thuận.
Biến môi trường mới GOFIPS140 có thể được sử dụng để chọn phiên bản mô-đun mã hóa Go để sử dụng trong bản dựng. Mới Thiết lập GODEBUG fips140 có thể được sử dụng để kích hoạt chế độ FIPS 140-3 khi chạy.
Go 1.24 bao gồm mô-đun mã hóa Go v1.0.0, hiện đang được thử nghiệm tại phòng thí nghiệm được CMVP công nhận.
Gói thử nghiệm mới/synctest
Gói thử nghiệm mới kiểm tra/kiểm tra đồng bộ Cung cấp hỗ trợ cho việc kiểm tra mã đồng thời.
- Chức năng synctest. chạy chạy một nhóm goroutine trong một "bong bóng" bị cô lập. Trong bong bóng của hàm gói thời gian hoạt động trên đồng hồ giả.
- Chức năng synctest.chờ đợi chờ cho đến khi tất cả các goroutine bị chặn trong bong bóng hiện tại.
Bạn có thể tìm thấy thông tin chi tiết trong tài liệu gói.
Gói synctest đang trong giai đoạn thử nghiệm và phải được kích hoạt bằng cách đặt GOEXPERIMENT=synctest. Gói API có thể thay đổi trong các bản phát hành trong tương lai. TRONG #67434 Bạn có thể xem thêm chi tiết và cung cấp phản hồi.
Những thay đổi nhỏ trong thư viện
lưu trữ
Các triển khai (*Writer.AddFS) trong archive/zip và archive/tar hiện ghi tiêu đề thư mục cho một thư mục trống.
byte
Gói byte thêm một số hàm hoạt động với trình lặp:
- đường Trả về một trình lặp qua các chuỗi được phân tách bằng dấu xuống dòng trong một lát byte.
- Tách Seq trả về một trình lặp qua tất cả các phần nhỏ của một phần byte được phân tách bằng một dấu phân cách.
- TáchSauSeq trả về một trình lặp qua các phần nhỏ của một phần byte, được chia sau mỗi lần xuất hiện dấu phân cách.
- TrườngSeq trả về một trình lặp qua các lát cắt phụ của một lát cắt byte xung quanh các chuỗi ký tự khoảng trắng, như đã định nghĩa unicode.IsSpace
- TrườngFuncSeq trả về một trình lặp qua các lát cắt con của một lát cắt byte xung quanh các chuỗi điểm mã Unicode thỏa mãn một thuật ngữ.
tiền điện tử / aes
Giá trị trả về Chipher mới không còn triển khai các phương thức NewCTR, NewGCM, NewCBCEncrypter và NewCBCDecrypter. Những phương pháp này không được ghi chép lại và không khả dụng trên mọi kiến trúc. Bây giờ ý nghĩa Chặn phải được chuyển trực tiếp đến các chức năng thích hợp mật mã / mật mã. Hiện tại, crypto/cipher vẫn kiểm tra các phương pháp này trên các giá trị Khối, mặc dù chúng không còn được thư viện chuẩn hỗ trợ nữa.
mật mã / mật mã
Tính năng mới NewGCMWithRandomNonce trả lại AEAD, thực hiện AES-GCM bằng cách tạo ra một nonce ngẫu nhiên trong quá trình Seal và thêm nó vào trước văn bản mã hóa.
Thực hiện Sông, đã trả lại CTR mới khi sử dụng với tiền điện tử / aes hiện tại nhanh hơn gấp nhiều lần trên amd64 và arm64.
OFB mới, CFBEncrypter mới и NewCFBDecrypter hiện đã được tuyên bố là lỗi thời. Chế độ OFB và CFB không được xác thực, thường cho phép các cuộc tấn công chủ động thao túng và khôi phục văn bản thuần túy. Các ứng dụng được khuyến khích sử dụng AEAD để đáp lại. Nếu chế độ chưa xác thực Sông cần thiết, có thể sử dụng CTR mới để đáp lại.
tiền điện tử / ecdsa
PrivateKey.Sign bây giờ tạo ra một chữ ký xác định theo RFC 6979, nếu nguồn ngẫu nhiên là nil.
tiền điện tử / md5
Giá trị trả về md5.mới, bây giờ cũng triển khai giao diện mã hóa.binaryappender.
tiền điện tử / rand
Chức năng Đọc hiện đảm bảo không có lỗi. Nếu Đọc gặp lỗi trong khi đọc Người đọc, chương trình sẽ chấm dứt vĩnh viễn. Lưu ý rằng Reader mặc định được ghi nhận là luôn hoạt động thành công, do đó thay đổi này chỉ ảnh hưởng đến các chương trình ghi đè biến Reader. Một ngoại lệ là các phiên bản Linux kernel trước 3.17, trong đó Reader mặc định vẫn mở /dev/urandom và có thể bị lỗi.
Trên Linux 6.11 trở lên, Reader hiện sử dụng lệnh gọi hệ thống getrandom thông qua vDSO. Cách này nhanh hơn nhiều lần, thường dùng để đọc những dữ liệu nhỏ.
Trên OpenBSD Reader hiện sử dụng arc4random_buf(3).
Tính năng mới bản văn giờ đây có thể tạo ra các chuỗi văn bản ngẫu nhiên được bảo mật bằng mật mã.
crypto / rsa
Tạo khóa bây giờ trả về lỗi nếu yêu cầu độ dài khóa nhỏ hơn 1024 bit. Tất cả các phương thức Sign, Verify, Encrypt và Decrypt hiện đều trả về lỗi nếu sử dụng với kích thước khóa nhỏ hơn 1024 bit. Những chìa khóa như vậy không an toàn và không nên sử dụng. Thiết lập GODEBUG rsa1024min=0 khôi phục lại hành vi cũ, nhưng các nhà phát triển Go khuyên bạn chỉ nên thực hiện điều này khi cần thiết và chỉ trong các bài kiểm tra, ví dụ bằng cách thêm dòng //go:debug rsa1024min=0 vào tệp kiểm tra. Mới Ví dụ GenerateKey cung cấp khóa kiểm tra chuẩn 2024-bit dễ sử dụng.
Bây giờ gọi điện an toàn và hiệu quả hơn PrivateKey.Tính toán trước để PrivateKey.Xác thực. Tính toán trước hiện nhanh hơn khi có phần được điền đầy Giá trị được tính toán trước, ví dụ khi trích xuất khóa từ JSON.
Gói hiện từ chối nhiều khóa không hợp lệ hơn ngay cả khi Validate không được gọi và Tạo khóa Bây giờ có thể trả về lỗi mới cho các nguồn ngẫu nhiên bị hỏng. Các cánh đồng Số nguyên tố и Đã tính toán trước cấu trúc PrivateKey hiện được sử dụng và xác thực ngay cả khi một số giá trị bị thiếu. Ngoài ra còn có những thay đổi đối với crypto/x509 để phân tích và trích xuất khóa RSA, được mô tả bên dưới.
Đăng nhậpPKCS1v15 и Xác minhPKCS1v15 hiện hỗ trợ SHA-512/224, SHA-512/256 và SHA-3.
Tạo khóa bây giờ sử dụng một phương pháp hơi khác để tạo số mũ riêng (hàm Carmichael thay vì hàm Euler). Các ứng dụng hiếm hoi tạo lại khóa bên ngoài chỉ từ các số nguyên tố có thể tạo ra các kết quả khác nhau nhưng tương thích.
Các thao tác trên khóa công khai và khóa riêng tư hiện nhanh hơn gấp hai lần trên wasm.
tiền điện tử/sha*
- crypto / sha1: giá trị trả về sha1.Mới bây giờ cũng thực hiện giao diện mã hóa.binaryappender.
- crypto / sha256: giá trị trả về sha256.Mới и sha256.Mới224 bây giờ cũng thực hiện giao diện mã hóa.binaryappender.
- crypto / sha512: giá trị trả về sha512.Mới, sha512.Mới384, sha512.Mới512_224 и sha512.Mới512_256, bây giờ cũng triển khai giao diện mã hóa.binaryappender.
tiền điện tử / tinh tế
Tính năng mới VớiDataIndependentTiming cho phép người dùng thực hiện một chức năng với các tính năng dành riêng cho kiến trúc được bật để đảm bảo rằng một số hướng dẫn nhất định không bị thay đổi theo thời gian của giá trị dữ liệu. Điều này có thể được sử dụng để đảm bảo rằng mã được viết để chạy trong thời gian không đổi chưa được tối ưu hóa bởi các hàm cấp bộ xử lý để nó chạy trong thời gian thay đổi. Hiện tại WithDataIndependentTiming sử dụng bit PSTATE.DIT trên arm64 và không làm gì trên các kiến trúc khác. Thiết lập GODEBUG dataindependenttiming=1 kích hoạt chế độ DIT cho toàn bộ chương trình Go.
Đầu ra XORByte phải chồng chéo hoàn toàn hoặc không chồng chéo với đầu vào. Trước đây, hành vi này không được xác định, nhưng bây giờ XORBytes sẽ báo lỗi.
tiền điện tử / tls
Máy chủ TLS hiện hỗ trợ Encrypted Client Hello (ECH). Tính năng này có thể được kích hoạt bằng cách điền vào trường. Cấu hình.EncryptedClientHelloKeys.
Cơ chế trao đổi khóa hậu lượng tử mới X25519MLKEM768 hiện được hỗ trợ và kích hoạt theo mặc định khi Cấu hình.CurvePreferences là số không. Thiết lập GODEBUG tlsmlkem=0 trả về giá trị mặc định.
Hỗ trợ cho trao đổi khóa X25519Kyber768Draft00 thử nghiệm đã bị xóa.
Lệnh trao đổi khóa hiện được xử lý hoàn toàn bởi gói crypto/tls. Đặt hàng Cấu hình.CurvePreferences hiện bị bỏ qua và nội dung chỉ được sử dụng để xác định trao đổi khóa nào sẽ được đưa vào khi trường được điền vào.
Trường mới ClientHelloInfo.Phần mở rộng Liệt kê danh sách các mã định danh tiện ích mở rộng nhận được trong tin nhắn Xin chào máy khách. Điều này có thể hữu ích cho việc lấy dấu vân tay của máy khách TLS.
tiền điện tử / x509
Thiết lập GODEBUG x509sha1 đã bị xóa. Chứng nhận.Xác minh không còn hỗ trợ chữ ký dựa trên SHA-1.
OID bây giờ thực hiện giao diện mã hóa.binaryappender и mã hóa.TextAppender.
Trường chính sách chứng chỉ mặc định đã được thay đổi từ Chứng chỉ.PolicyIdentifiers trên Chứng chỉ.Chính sách. Khi phân tích chứng chỉ, cả hai trường sẽ được điền, nhưng khi tạo chính sách chứng chỉ, chúng sẽ được lấy từ trường Certificate.Policies thay vì Certificate.PolicyIdentifiers. Có thể hoàn nguyên thay đổi này. Thiết lập GODEBUG x509usepolicies=0.
Tạo chứng chỉ bây giờ sẽ tạo ra một số sê-ri bằng phương pháp tuân thủ RFC 5280 khi truyền một trường mẫu Giấy chứng nhận.Số sê-ri nil, thay vì bị sập.
Chứng chỉ.Xác minh hiện hỗ trợ xác thực chính sách như được định nghĩa trong RFC 5280 và RFC 9618. Trường mới VerifyOptions.CertificatePolicies có thể được thiết lập thành một bộ chính sách có thể chấp nhận được OID. Chỉ các chuỗi chứng chỉ có biểu đồ chính sách hợp lệ mới được trả về từ Chứng chỉ.Xác minh.
MarshalPKCS8Khóa riêng bây giờ trả về lỗi thay vì lấy khóa RSA không hợp lệ. (MarshalPKCS1Khóa riêng không có lỗi trả về và hành vi của nó khi cung cấp khóa không hợp lệ vẫn chưa được xác định.)
Phân tíchPKCS1PrivateKey и Phân tíchPKCS8PrivateKey Bây giờ sử dụng và xác thực các giá trị CRT được mã hóa, do đó có thể từ chối các khóa RSA không hợp lệ đã được chấp nhận trước đó. Cách sử dụng Cài đặt GODEBUG x509rsacrt=0 quay lại tính toán lại các giá trị CRT.
gỡ lỗi / elf
Gói gỡ lỗi / elf Thêm hỗ trợ xử lý các phiên bản ký hiệu trong các tệp ELF (Định dạng có thể thực thi và liên kết) động. Phương pháp mới Tệp.DynamicVersions Trả về danh sách các phiên bản động được xác định trong tệp ELF. Phương pháp mới Tệp.DynamicVersionNeeds Trả về danh sách các phiên bản động mà tệp ELF này yêu cầu, được xác định trong các đối tượng ELF khác. Cuối cùng, các lĩnh vực mới Biểu tượng.HasVersion и Biểu tượng.Phiên bảnChỉ mục chỉ ra phiên bản của ký hiệu.
mã hóa
Hai giao diện mới Trình thêm văn bản и BinaryAppender được giới thiệu để thêm văn bản hoặc biểu diễn nhị phân của một đối tượng vào một lát byte. Các giao diện này cung cấp cùng chức năng như Trình soạn thảo văn bản и Nhị phânMarshalernhưng thay vì phân bổ một lát cắt mới mỗi lần, chúng sẽ thêm dữ liệu trực tiếp vào một lát cắt hiện có. Các giao diện này hiện đang được triển khai bởi các loại thư viện chuẩn đã triển khai TextMarshaler và/hoặc BinaryMarshaler.
mã hóa / json
Khi xây dựng, trường cấu trúc có tùy chọn omitzero mới trong thẻ trường cấu trúc sẽ bị bỏ qua nếu giá trị của nó bằng không. Nếu kiểu trường có phương thức bool IsZero(), phương thức này sẽ được sử dụng để xác định xem giá trị có bằng không hay không. Nếu không thì giá trị sẽ bằng không nếu nó giá trị null cho loại của nó. Thẻ trường omitzero sạch hơn và ít xảy ra lỗi hơn omitempty khi mục đích là bỏ qua các giá trị null. Đặc biệt, không giống như omitempty, omitzero bỏ qua số không thời gian.thời gian giá trị, đây là nguồn gốc phổ biến của các vấn đề.
Nếu cả omitempty và omitzero được chỉ định, trường sẽ bị bỏ qua nếu giá trị trống hoặc bằng không (hoặc cả hai).
Bỏ ghi đè TypeError.Field hiện nay bao gồm các cấu trúc tích hợp để cung cấp thông báo lỗi chi tiết hơn.
go / các loại
Tất cả các cấu trúc dữ liệu go/types hiển thị chuỗi các cặp phương thức, như Len() int và At(int) T, giờ đây cũng có các phương thức trả về trình lặp, cho phép mã đơn giản hơn như thế này:
params := fn.Type.(*types.Signature).Params() cho i := 0; i < params.Len(); i++ { sử dụng(params.At(i)) }
Về điều này:
đối với param := phạm vi fn.Signature().Params().Variables() { sử dụng(param) }
Phương thức: Giao diện.EmbeddedTypes Giao diện.Phương pháp rõ ràng Giao diện.Phương pháp Phương phápSet.Phương pháp Phương pháp được đặt tên Phạm vi.Trẻ em Cấu trúc.Trường Tuple.Biến Danh sách loại.Các loại LoạiParamList.TypeParams Liên minh.Điều khoản
băm/*
- hash / adler32: giá trị trả về Mới, bây giờ cũng triển khai giao diện mã hóa.binaryappender
- băm / crc32: giá trị trả về Mới и MớiIEEE, bây giờ cũng triển khai giao diện mã hóa.binaryappender
- băm / crc64: giá trị trả về Mới, bây giờ cũng triển khai giao diện mã hóa.binaryappender
- băm / fnv: giá trị trả về New32 Mới32a New64 Mới64a New128 и Mới128a, bây giờ cũng triển khai giao diện mã hóa.binaryappender
- hàm băm/maphash: tính năng mới So sánh и ViếtComparable có thể tính toán giá trị băm của bất kỳ giá trị nào có thể so sánh được. Tính năng này cho phép bạn băm bất kỳ thứ gì có thể được sử dụng làm khóa từ điển Go.
nhật ký/nhịp chậm
mới Người xử lý bỏ đi là trình xử lý không bao giờ được kích hoạt và luôn loại bỏ kết quả đầu ra của nó.
Cấp и Mức độBiến đổi bây giờ triển khai giao diện mã hóa.TextAppender.
toán học/*
- toán học / lớn: Phao nổi (Float), Int и Rat bây giờ triển khai giao diện mã hóa.TextAppender.
- toán học / rand: các lệnh gọi hàm cấp cao nhất đã lỗi thời Hạt không còn tác dụng nữa. Để khôi phục lại hành vi cũ, bạn có thể sử dụng Thiết lập GODEBUG randseednop=0. Thêm ngữ cảnh trong cung cấp 67273.
- toán/rand/v2: ChaCha8 и PCG bây giờ triển khai giao diện mã hóa.binaryappender.
net
NgheCondig hiện nay sử dụng MPTCP theo mặc định trên các hệ thống được hỗ trợ (hiện tại chỉ có Linux).
IP bây giờ thực hiện giao diện mã hóa.TextAppender.
net / http
Hạn chế đã thay đổi Giao thông để nhận được thông tin phản hồi 1xx để đáp ứng yêu cầu. Trước đây, thao tác này sẽ dừng yêu cầu và trả về lỗi sau khi nhận được hơn 5 phản hồi 1xx. Bây giờ điều này chỉ trả về lỗi nếu tổng kích thước của tất cả các phản hồi 1xx vượt quá cài đặt cấu hình Vận chuyển.MaxResponseHeaderBytes.
Ngoài ra, khi một yêu cầu có móc theo dõi net/http/httptrace.ClientTrace.Got1xxResponse, hiện tại không còn giới hạn về tổng số câu trả lời là 1xx. Hook Got1xxResponse có thể trả về lỗi để dừng yêu cầu.
Giao thông и của chúng tôi hiện có trường HTTP2 cho phép cấu hình cài đặt giao thức HTTP/2.
Các lĩnh vực mới Máy chủ.Giao thức и Giao thức vận chuyển cung cấp một cách đơn giản để cấu hình giao thức HTTP mà máy chủ hoặc máy khách sử dụng.
Máy chủ và máy khách có thể được cấu hình để hỗ trợ các kết nối HTTP/2 không được mã hóa.
Khi Máy chủ.Giao thức chứa UnencrypterHTTP2, máy chủ sẽ chấp nhận các kết nối HTTP/2 trên các cổng không được mã hóa. Máy chủ có thể chấp nhận cả HTTP/1 và HTTP/2 không được mã hóa trên cùng một cổng.
Khi Giao thức vận chuyển chứa UnencryptedHTTP2 và không chứa HTTP1, quá trình vận chuyển sẽ sử dụng HTTP/2 không được mã hóa cho các địa chỉ http://. Nếu phương tiện truyền tải được cấu hình để sử dụng cả HTTP/1 và HTTP/2 không được mã hóa, nó sẽ sử dụng HTTP/1.
Hỗ trợ cho HTTP/2 không được mã hóa sử dụng "HTTP/2 với Forward-Learning" (RFC 9113, phần 3.3). Tiêu đề lỗi thời “Nâng cấp: h2c” không được hỗ trợ.
lưới/mạng lưới
Bổ sung, Địa chỉCổng и Tiếp đầu ngữ bây giờ triển khai giao diện mã hóa.binaryappender и mã hóa.TextAppender.
net / url
URL bây giờ cũng thực hiện giao diện mã hóa.binaryappender.
hệ điều hành / người dùng
Trên Windows Current bây giờ có thể sử dụng trong Windows Nano Server. Việc triển khai đã được cập nhật để tránh sử dụng các chức năng từ thư viện NetApi32, vốn không có trong Nano Server.
Trên Windows Current, Tra cứu и Tra cứuId hiện hỗ trợ các tài khoản dịch vụ người dùng tích hợp sau:
- HỆ THỐNG ỦY QUYỀN NT
- NT AUTHORITYLOCAL SERVICE
- DỊCH VỤ GIAO LƯU CỦA NT AUTHORK
Trên Windows Current được tăng tốc đáng kể khi người dùng hiện tại tham gia vào một miền chậm, đây là trường hợp phổ biến đối với nhiều người dùng doanh nghiệp. Hiệu suất của việc triển khai mới hiện chỉ tính bằng mili giây, so với việc triển khai trước đó có thể mất vài giây, thậm chí vài phút để hoàn tất.
Trên Windows Current bây giờ trả về người dùng sở hữu quy trình khi luồng hiện tại đang mạo danh người dùng khác. Trước đó, lệnh này trả về lỗi.
regexp
biểu thức chính quy bây giờ thực hiện giao diện mã hóa.TextAdapter.
thời gian chạy
Chức năng GOROOT hiện đã không còn được sử dụng nữa. Trong các môi trường mới hơn, bạn nên sử dụng đường dẫn hệ thống để xác định nhị phân "go" và sử dụng go env GOROOT để xác định GOROOT.
dây
Gói dây thêm một số hàm để làm việc với các trình lặp:
- đường Trả về một trình lặp qua các dòng được phân tách bằng dấu xuống dòng trong một chuỗi.
- Tách Seq trả về một trình lặp qua tất cả các chuỗi con của một chuỗi được phân tách bằng dấu phân cách.
- TáchSauSeq trả về một trình lặp qua các chuỗi con của một chuỗi, được phân tách sau mỗi lần xuất hiện dấu phân cách.
- TrườngSeq trả về một trình lặp qua các chuỗi con của một chuỗi xung quanh các chuỗi ký tự khoảng trắng, như đã định nghĩaunicode.IsSpace
- TrườngFuncSeq Trả về một trình lặp qua các chuỗi con xung quanh các chuỗi điểm mã Unicode thỏa mãn một thuật ngữ.
đồng bộ
Thực hiện đồng bộ.bản đồ đã được thay đổi để cải thiện hiệu suất, đặc biệt là đối với những thay đổi trong từ điển. Ví dụ, khả năng xảy ra tranh chấp thay đổi tập hợp rời rạc ít hơn trên các từ điển lớn và không còn yêu cầu thời gian xây dựng để đạt được tải từ điển tranh chấp thấp.
Nếu bạn gặp bất kỳ vấn đề nào, hãy đặt GOEXPERIMENT=nosynchashtriemap trong quá trình xây dựng để quay lại triển khai cũ và vui lòng điền vào mẫu đơn xin việc.
thử nghiệm
Phương pháp mới T.Bối cảnh и B.Bối cảnh trả về một ngữ cảnh bị loại bỏ sau khi thử nghiệm hoàn tất và trước khi các hàm dọn dẹp thử nghiệm được thực thi.
Phương pháp mới T.Chdir и B.Chdir có thể được sử dụng để thay đổi thư mục làm việc trong suốt thời gian thử nghiệm hoặc đánh giá chuẩn.
văn bản / mẫu
Các mẫu hiện hỗ trợ range-over-func và range-over-int.
thời gian
Thời gian bây giờ thực hiện giao diện mã hóa.binaryappender и mã hóa.TextAppender.
cổng
Linux
Như nó đã từng công bố Theo ghi chú phát hành Go 1.23, Go 1.24 yêu cầu phiên bản hạt nhân Linux 3.2 trở lên.
Darwin
Go 1.24 là bản phát hành cuối cùng chạy trên macOS 11 Big Sur. Phiên bản 1.25 sẽ yêu cầu macOS 12 Monterey trở lên.
lắp ráp web
Chỉ thị biên dịch go:wasmexport đã được thêm vào chương trình Go để xuất các hàm sang máy chủ WebAssembly.
Trong WebAssembly System Interface Preview 1 (GOOS=wasip1 GOARCH=wasm), Go 1.24 hỗ trợ xây dựng chương trình Go như lò phản ứng/thư viện bằng cách chỉ định cờ xây dựng -buildmode=c-shared.
Bây giờ có thể sử dụng nhiều kiểu hơn làm kiểu đối số hoặc kiểu kết quả cho các hàm go:wasmimport. Đặc biệt, bool, string, uintptr và các con trỏ tới một số kiểu nhất định được phép (xem chi tiết trong tài liệu), cùng với các kiểu số nguyên và số dấu phẩy động 32 bit và 64 bit, và unsafe.Pointer, vốn đã được phép. Các kiểu này cũng được phép sử dụng làm kiểu đối số hoặc kiểu kết quả cho các hàm go:wasmexport.
Các tệp hỗ trợ cho WebAssembly đã được chuyển từ misc/wasm sang lib/wasm.
Dung lượng bộ nhớ ban đầu được giảm đáng kể, đặc biệt là đối với các ứng dụng WebAssembly nhỏ.
Cửa sổ
Cổng windows/arm 32-bit (GOOS=windows GOARCH=arm) đã được đánh dấu là bị hỏng. Chi tiết trong #70705
Nguồn: linux.org.ru
