Go là một ngôn ngữ lập trình được biên dịch đồng thời với kiểu gõ tĩnh lấy cảm hứng từ cú pháp C.
Phiên bản Go 1.22 mới ra mắt sáu tháng sau phiên bản 1.21, với một số thay đổi đáng chú ý về bộ công cụ, môi trường chạy, cải tiến tối ưu hóa, nâng cấp trình biên dịch và thư viện.
Đối với những người chưa quen với Go, tôi cần phải nói thêm rằng đây là một ngôn ngữ lập trình đang được Google phát triển với sự tham gia của cộng đồng, là một giải pháp lai kết hợp hiệu năng cao của các ngôn ngữ biên dịch với những ưu điểm của ngôn ngữ kịch bản, như dễ viết mã, tốc độ phát triển và khả năng chống lỗi.
Các tính năng mới chính của Go 1.22
Trong phiên bản mới này, được giới thiệu từ Go 1.22, có hai thay đổi nổi bật đối với vòng lặp "for" . Trước đây, các biến được khai báo bởi vòng lặp "for" được tạo một lần và được cập nhật trong mỗi lần lặp. Trong Go 1.22, mỗi lần lặp của vòng lặp tạo ra các biến mới để ngăn ngừa lỗi chia sẻ ngẫu nhiên. Ngoài ra , hỗ trợ thử nghiệm (GOEXPERIMENT=rangefunc) cho các hàm phạm vi trong vòng lặp "for" đã được thêm vào, cho phép chỉ định một hàm như một trình lặp. Một vấn đề tồn tại lâu nay với vòng lặp "for" khiến các lệnh gọi coroutine chia sẻ các biến vòng lặp giữa các lần lặp cũng đã được giải quyết . Hơn nữa, vòng lặp "for" giờ đây có thể lặp qua các số nguyên. Ví dụ:
package main import "fmt" func main() { for i := range 10 { fmt.Println(10 - i) } fmt.Println("go1.22 cất cánh!") }
Một thay đổi đáng chú ý khác trong phiên bản mới này là việc bổ sung khả năng sử dụng thư mục " vendor " chứa các phụ thuộc của không gian làm việc. Giờ đây, các lệnh có thể sử dụng thư mục này, được tạo bằng lệnh ` go work vendor` và được sử dụng trong các lệnh xây dựng khi ` -mod` được đặt thành " vendor ", đây là giá trị mặc định khi thư mục " vendor " tồn tại trong không gian làm việc.
Điều quan trọng cần lưu ý là chức năng ` go get` không còn được hỗ trợ bên ngoài một mô-đun trong chế độ GOPATH cũ . Tuy nhiên, các lệnh xây dựng khác như `go build` và `go test` sẽ tiếp tục hoạt động vô thời hạn đối với các chương trình GOPATH cũ. Ngoài ra, lệnh `go mod init` sẽ không còn cố gắng nhập các yêu cầu mô-đun từ các tệp cấu hình của các công cụ nhà cung cấp khác (chẳng hạn như Gopkg.lock).
Go 1.22 giới thiệu gói io/unsafe mới cung cấp chức năng làm việc với con trỏ và bộ nhớ không an toàn . Gói này cung cấp các phương thức để chuyển đổi con trỏ từ kiểu an toàn sang kiểu không an toàn, cũng như thực hiện các thao tác sao chép bộ nhớ mà không cần kiểm tra giới hạn.
Công việc tiếp tục được tiến hành để tích hợp các tối ưu hóa trình biên dịch dựa trên kết quả phân tích mã PGO. Trình biên dịch hiện sử dụng các công cụ khử ảo hóa để thay thế các lệnh gọi gián tiếp từ các phương thức khác nhau bằng việc thực thi các khối nội tuyến mở rộng. Khi PGO được kích hoạt, thay đổi này đã cải thiện hiệu suất của hầu hết các chương trình từ 2% đến 14%.
Trong phiên bản Go dành cho Windows, các chương trình liên kết hoặc tải các thư viện Go được xây dựng với -buildmode=c-archive hoặc -buildmode=c-shared giờ đây có thể sử dụng API Ghi nhật ký sự kiện Windows (ETW) thông qua các gói runtime/trace và tracehook mới , vốn triển khai giao thức thu thập dấu vết sự kiện Go dưới dạng nhà cung cấp ETW.
Trong số những thay đổi khác nổi bật:
- Lệnh đi kiểm tra -cover hiện in bản tóm tắt phạm vi bảo hiểm cho các gói được bảo hiểm không có tệp thử nghiệm riêng.
- hệ điều hành / thực thi, khả năng xác định thuộc tính ngữ cảnh đã được thêm vào, cho phép bạn đặt các giá trị như thư mục làm việc, biến môi trường và bộ mô tả tệp đầu vào/đầu ra cho các lệnh được thực thi.
- Quản lý bộ nhớ được tối ưu hóa trong thời gian chạy, giúp tăng hiệu suất 1-3% và giảm mức tiêu thụ bộ nhớ 1% cho hầu hết các ứng dụng.
- Elququete net / http, chức năng đã được thêm vào ĐóngKết nối nhàn rỗi tới máy khách HTTP, nó sẽ đóng tất cả các kết nối nhàn rỗi mà máy khách đã sử dụng gần đây
- Một triển khai thử nghiệm cải tiến (GOEXPERIMENT=newinliner) của cơ chế chèn cuộc gọi đã được thêm vào trình biên dịch, sử dụng phương pháp phỏng đoán để tách các hoạt động quan trọng khỏi các hoạt động không quan trọng.
- Gói đã được thêm » toán/rand/v2 » vào thư viện chuẩn, nơi cung cấp API nhất quán hơn và sử dụng thuật toán nhanh hơn để tạo số giả ngẫu nhiên.
- Elququete net/http.ServeMux Đã thêm khả năng chỉ định phương thức và mặt nạ trong mẫu.
Cuối cùng, nếu bạn muốn tìm hiểu thêm, bạn có thể xem chi tiết tại liên kết sau.