Đi phát hành 1.22

Việc phát hành ngôn ngữ lập trình Go 1.22 được trình bày, đang được Google phát triển với sự tham gia của cộng đồng như một giải pháp kết hợp kết hợp hiệu suất cao của các ngôn ngữ được 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à bảo vệ lỗi. Mã dự án được phân phối theo giấy phép BSD.

Cú pháp của Go dựa trên các yếu tố quen thuộc của ngôn ngữ C với một số vay mượn từ ngôn ngữ Oberon. Ngôn ngữ khá ngắn gọn nhưng mã rất dễ đọc và dễ hiểu. Mã Go được biên dịch thành các tệp thực thi nhị phân riêng biệt được thực thi nguyên bản mà không cần sử dụng máy ảo (mô-đun lược tả, gỡ lỗi và các hệ thống con phát hiện vấn đề thời gian chạy khác được tích hợp dưới dạng các thành phần thời gian chạy), cho phép hiệu suất tương đương với các chương trình C.

Dự án ban đầu được phát triển với mục tiêu lập trình đa luồng và vận hành hiệu quả trên các hệ thống đa lõi, bao gồm việc cung cấp các phương tiện ở cấp độ người vận hành để tổ chức tính toán song song và tương tác giữa các phương pháp thực hiện song song. Ngôn ngữ này cũng cung cấp khả năng bảo vệ tích hợp chống lại các khối bộ nhớ được phân bổ quá mức và cung cấp khả năng sử dụng trình thu gom rác.

Trong số những thay đổi trong bản phát hành mới:

  • Hỗ trợ xác định phạm vi số nguyên đã được thêm vào vòng lặp “for”, ví dụ: để lặp qua các giá trị từ 0 đến 9, giờ đây bạn có thể sử dụng vòng lặp “for i := range 10 {...}”.
  • Đã thêm hỗ trợ thử nghiệm (GOEXPERIMENT=rangefunc) cho các hàm phạm vi cho vòng lặp for, cho phép bạn chỉ định một hàm làm trình vòng lặp. Ví dụ: "for i, x := range slice.Backward(s) {...}"
  • Đã giải quyết một vấn đề tồn tại lâu dài với các vòng lặp khiến lệnh gọi đến coroutine (goroutine) chia sẻ các biến vòng lặp trong các lần lặp. Ví dụ: các giá trị mã := []string{"a", "b", "c"} cho _, v := giá trị phạm vi ​​{ go func() { fmt.Println(v) done < - true }() } bây giờ sẽ xuất ra "a", "b" và "c" chứ không chỉ "c" như trước đây.
  • Việc quản lý bộ nhớ trong thời gian chạy đã được tối ưu hóa, giúp tăng hiệu suất thêm 1-3% và giảm mức tiêu thụ bộ nhớ trong hầu hết các ứng dụng xuống 1%.
  • Công việc tiếp tục bao gồm các tối ưu hóa trong trình biên dịch dựa trên kết quả của việc lập hồ sơ mã (PGO - Tối ưu hóa theo hướng dẫn hồ sơ), cho phép tính đến các tính năng được xác định trong quá trình thực hiện chương trình. Trong phiên bản mới, trình biên dịch sử dụng các công cụ ảo hóa để thay thế các lệnh gọi gián tiếp của 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 bật, thay đổi được thêm vào đã cải thiện hiệu suất của hầu hết các chương trình từ 2-14%.
  • Một thử nghiệm (GOEXPERIMENT=newinliner) cải tiến việc triển khai cơ chế nội tuyế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 để phân tách các hoạt động quan trọng và không quan trọng.
  • Gói "math/rand/v2" đã được thêm vào thư viện tiêu chuẩn, cung cấp API toàn diện hơn và sử dụng thuật toán nhanh hơn để tạo số giả ngẫu nhiên.
  • Gói net/http.ServeMux đã thêm khả năng chỉ định các phương thức và mặt nạ trong các mẫu, ví dụ: mẫu “GET /static/{id}/” sẽ được áp dụng cho các yêu cầu có phương thức HTTP “GET” và sẽ lưu trữ giá trị của đoạn thứ hai của đường dẫn được yêu cầu trong mã định danh “ id”.
  • Gói cơ sở dữ liệu/sql đã thêm hỗ trợ cho loại Null[T], cho phép bạn quét các cột có thể là NULL. Đã thêm hàm Concat vào gói lát để hợp nhất nhiều lát thuộc bất kỳ loại nào.
  • Trong các lệnh làm việc với không gian làm việc (bộ sưu tập mô-đun), có thể sử dụng thư mục “nhà cung cấp”, chứa các phụ thuộc vào nội dung của không gian làm việc. Thư mục được tạo khi thực thi lệnh “đi làm nhà cung cấp” và được sử dụng trong các lệnh xây dựng khi tùy chọn “-mod=vendor” được đặt (bật theo mặc định nếu có thư mục nhà cung cấp).

Những thay đổi trong hành vi tiện ích.

  • go get không còn được hỗ trợ bên ngoài mô-đun ở chế độ GOPATH cũ (tức là với GO111MODULE=off). Các lệnh xây dựng khác, chẳng hạn 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ũ.
  • go mod init 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 cho các công cụ của nhà cung cấp khác (chẳng hạn như Gopkg.lock).
  • go test -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 kiểm tra riêng. Trước Go 1.22, liệu có báo cáo test -cover cho gói như vậy không? mymod/mypack [không có tập tin kiểm tra]

    và bây giờ kể từ Go 1.22, các chức năng trong một gói được coi là chưa được phát hiện: phạm vi bao phủ của mymod/mypack: 0.0% câu lệnh Lưu ý: nếu một gói không chứa mã thực thi nào cả, chúng tôi không thể báo cáo tỷ lệ bao phủ có ý nghĩa; đối với những gói như vậy, go test sẽ tiếp tục báo thiếu file test.

  • Giao diện web của công cụ theo dõi đã được cập nhật một chút như một phần công việc nhằm hỗ trợ công cụ theo dõi mới, khắc phục một số vấn đề và cải thiện khả năng đọc của nhiều trang khác nhau. Giao diện web hiện hỗ trợ khám phá dấu vết ở chế độ xem an toàn theo luồng. Trình xem theo dõi hiện cũng hiển thị toàn bộ thời lượng của tất cả các cuộc gọi hệ thống. Những cải tiến này chỉ áp dụng cho việc xem dấu vết được tạo bởi các chương trình được xây dựng trên Go 1.22 trở lên. Bản phát hành trong tương lai sẽ mang lại một số cải tiến này cho các dấu vết do phiên bản Go cũ tạo ra.
  • Thời gian chạy hiện lưu trữ siêu dữ liệu thu thập rác dựa trên loại gần hơn với từng đối tượng vùng lưu trữ. Thay đổi này cũng giảm khoảng 1% chi phí bộ nhớ của hầu hết các chương trình Go bằng cách loại bỏ siêu dữ liệu dư thừa. Trong một số chương trình, sự cải thiện có thể nhỏ hơn vì thay đổi này điều chỉnh ranh giới lớp kích thước của bộ cấp phát bộ nhớ, do đó một số đối tượng có thể được chuyển sang lớp có kích thước cao hơn. Tác động của thay đổi này là địa chỉ của một số đối tượng trước đây luôn được căn chỉnh trên ranh giới 16 byte (hoặc cao hơn) giờ đây sẽ chỉ được căn chỉnh trên ranh giới 8 byte. Một số chương trình sử dụng các lệnh tập hợp yêu cầu căn chỉnh địa chỉ bộ nhớ trên 8 byte và dựa vào hành vi căn chỉnh trước đó của bộ cấp phát bộ nhớ có thể không thành công, nhưng chúng tôi cho rằng những chương trình như vậy sẽ hiếm khi xảy ra. Các chương trình như vậy có thể được xây dựng bằng GOEXPERIMENT=noallocheaders với tùy chọn quay lại mô hình siêu dữ liệu cũ và khôi phục hành vi căn chỉnh trước đó, nhưng chủ sở hữu gói nên cập nhật mã lắp ráp của họ để tránh giả định căn chỉnh, vì cách giải quyết này sẽ bị xóa trong bản phát hành trong tương lai .
  • Như đã đề cập trong ghi chú phát hành Go 1.20, Go 1.22 hiện yêu cầu phiên bản cuối cùng của Go 1.20 trở lên cho các bản dựng ban đầu. Chúng tôi hy vọng Go 1.24 sẽ yêu cầu phiên bản cuối cùng của Go 1.22 trở lên cho bản dựng ban đầu.
    Bản gốc (go.dev)

Nguồn: linux.org.ru

Mua dịch vụ lưu trữ đáng tin cậy cho các trang web có bảo vệ DDoS, máy chủ VPS VDS 🔥 Mua dịch vụ hosting website đáng tin cậy với bảo vệ DDoS, máy chủ VPS VDS | ProHoster