11 điểm bởi GN⁺ 2025-11-16 | 1 bình luận | Chia sẻ qua WhatsApp
  • Nhân dịp 16 năm Go được phát hành mã nguồn mở, bài viết tổng hợp những tiến bộ kỹ thuật chính trong 1 năm gần đây và các kế hoạch sắp tới
  • Ở các phiên bản Go 1.24 và 1.25, đã có những cải tiến quy mô lớn trên toàn diện về kiểm thử·bảo mật·hiệu năng
  • Các tính năng như synctest, container-aware scheduling, flight recorder giúp tăng cường độ tin cậy và hiệu quả của môi trường production
  • Chuẩn bị chứng nhận FIPS 140-3 cho các gói mật mã, Green Tea GC cùng nhiều cải tiến khác giúp nâng cao bảo mật và hiệu năng
  • Hệ sinh thái Go đang mở rộng theo hướng phát triển tích hợp AI và tự động hóa mã hiện đại, đồng thời dự kiến tăng cường hỗ trợ cho phần cứng quy mô lớn và AI trong tương lai

Kỷ niệm 16 năm Go và tổng quan các bản phát hành gần đây

  • Kỷ niệm 16 năm kể từ ngày 10 tháng 11 Go được công bố dưới dạng mã nguồn mở
  • Tháng 2 năm 2024 phát hành Go 1.24, tháng 8 phát hành Go 1.25 theo chu kỳ phát hành định kỳ
  • Hai phiên bản này bao gồm API cho phát triển phần mềm có độ tin cậy cao, tăng cường bảo mật, và cải thiện hiệu năng runtime
  • Nhóm Go đang thúc đẩy phát triển AI tích hợp·agent·hạ tầng dựa trên Go để đáp ứng những thay đổi của thời đại AI tạo sinh

Những cải tiến cốt lõi về ngôn ngữ và thư viện chuẩn

  • Gói testing/synctest được đưa vào thử nghiệm ở Go 1.24 và chính thức hóa ở 1.25 giúp đơn giản hóa việc kiểm thử mã bất đồng bộ và song song
    • Thông qua ảo hóa thời gian, các bài test chậm hoặc thiếu ổn định có thể được chuyển thành các bài test đáng tin cậy và cho kết quả tức thì
    • Có cấu trúc tích hợp sâu với Go runtime và thư viện chuẩn
  • API testing.B.Loop cải thiện tính dễ dùng của API benchmark cũ (B.N) và loại bỏ những cạm bẫy truyền thống
  • Đã bổ sung API dọn dẹp test và xuất log dựa trên Context, giúp nâng cao hiệu quả quản lý kiểm thử
  • Go 1.25 giới thiệu container-aware scheduling để tự động điều chỉnh mức độ xử lý song song bên trong container
    • Ngăn CPU throttling và cải thiện độ trễ
  • Tính năng flight recorder mở rộng trình theo dõi thực thi, cho phép ghi chi tiết các sự kiện ngay trước khi lỗi xảy ra

Phát triển phần mềm lấy bảo mật làm trọng tâm

  • Các gói mật mã của Go trong đợt kiểm toán của công ty bảo mật độc lập Trail of Bits chỉ phát hiện một vấn đề duy nhất ở mức độ nghiêm trọng thấp
  • Với sự hợp tác giữa Go Security Team và Geomys, Go đã đạt chứng nhận CAVP và hoàn tất chuẩn bị cho chứng nhận FIPS 140-3
    • Giúp tăng khả năng sử dụng Go trong môi trường bị ràng buộc bởi quy định, đồng thời giải quyết vấn đề phụ thuộc vào các giải pháp không chính thức trước đây
  • Thư viện chuẩn của Go đang phát triển theo hướng an toàn theo mặc định (safe by default)
    • API os.Root trong Go 1.24 ngăn chặn lỗ hổng path traversal khi truy cập hệ thống tệp

Cải tiến cấu trúc bên trong và hiệu năng

  • Trong Go 1.24, cách triển khai map được thiết kế lại hoàn toàn, phản ánh các thiết kế hash table hiện đại
    • Cải thiện hiệu năng, giảm độ trễ, và nâng cao hiệu quả bộ nhớ
  • Garbage collector Green Tea của Go 1.25 giảm chi phí GC từ 10~40%
    • Áp dụng thuật toán mới phù hợp với phần cứng hiện đại
    • Ở Go 1.26 dự kiến có thêm 10% cải thiện trên phần cứng hỗ trợ AVX-512
    • Dự kiến được bật mặc định từ Go 1.26

Mở rộng stack phát triển và tích hợp AI

  • Go đang phát triển vượt ra ngoài một ngôn ngữ để trở thành một nền tảng phát triển hoàn chỉnh
  • Language server gopls được tăng cường tính năng qua 4 bản phát hành định kỳ (v0.17~v0.20)
    • Bổ sung bộ phân tích mã, refactoring, xử lý JSON tag, MCP server tích hợp sẵn cùng nhiều tính năng khác
  • Đã đưa vào tính năng tự động hiện đại hóa mã (modernizer)
    • Tự động chuyển các mẫu mã cũ sang dạng mới và an toàn hơn
    • Tích hợp với tính năng gợi ý trong IDE để giúp duy trì mã nhất quán và hỗ trợ việc học của công cụ AI
    • Trong Go 1.26, lệnh go fix dự kiến sẽ được cải tổ để áp dụng toàn bộ modernizer cùng lúc
  • Thông qua hợp tác với Anthropic và cộng đồng, Go SDK chính thức v1.0.0 cho Model Context Protocol (MCP) đã được công bố
    • Hỗ trợ client·server MCP, dựa trên các tính năng MCP của gopls
    • ADK for Go của Google cung cấp framework phát triển hệ thống đa agent trên nền MCP SDK
    • Điều này chứng minh tính đồng thời·hiệu năng·độ tin cậy của Go phù hợp với phát triển AI production

Kế hoạch sắp tới và cộng đồng

  • Dự kiến triển khai Green Tea GC ở mức phổ biến rộng rãi, hỗ trợ phần cứng SIMD, và tăng cường khả năng mở rộng đa lõi
  • Đang tiến hành các hạng mục như nâng cấp lớn cho encoding/json, profiling rò rỉ goroutine, cải thiện net/http·unicode
  • Mở rộng ngôn ngữ·công cụ·hệ thống chẩn đoán để kết hợp Go với AI
  • Dự án mã nguồn mở Go đặt mục tiêu mở rộng cộng đồng đóng góp và khả năng mở rộng của quy trình phát triển
  • Sự phát triển của Go dựa trên đóng góp từ cộng đồng người dùng và cộng tác viên, đồng thời báo hiệu tăng trưởng bền vững trong tương lai

1 bình luận

 
GN⁺ 2025-11-16
Ý kiến trên Hacker News
  • Tôi thật sự rất thích Go. Nó đặc biệt tỏa sáng trong môi trường monorepo. Khi thêm một ứng dụng mới, chỉ cần tạo một thư mục và đặt vào đó một file go có hàm main(). Chạy go install ./... từ thư mục gốc là toàn bộ sẽ được build rất nhanh.
    Khi cần làm nhanh một chương trình CLI, sự đơn giản này thật sự là một nước đi thần thánh

    • Tôi có chút thắc mắc liệu gần như ngôn ngữ nào khác cũng chẳng thể làm như vậy sao
    • Tôi nghĩ những trường hợp sử dụng monorepo như thế này nên được nhắc đến thường xuyên hơn
  • Ngày trước người ta thường nói ngôn ngữ không phải là nút thắt cổ chai, nhưng khi lần đầu nhìn thấy Go tôi đã nghĩ “cái này khác đấy”. Nó cũng học rất nhanh — có lẽ vì đặc tả ngôn ngữ nhỏ.
    Cảm giác như nhận được 80% tính năng của Rust với 20% công sức

    • Điểm hay của Go là có thể học hết toàn bộ ngôn ngữ trong thời gian ngắn. Có thể nắm được tất cả, kể cả tính đồng thời và các cạm bẫy. Trong khi đó C# hay C++ quá phức tạp nên gần như không ai hiểu toàn bộ
    • Như Rob Pike từng nói, Go là ngôn ngữ được thiết kế cho lập trình viên junior. Một mục tiêu lớn trong nội bộ Google cũng là giảm thời gian build. Vì vậy nếu có dependency không dùng đến thì sẽ báo lỗi biên dịch (nguồn)
    • Đặc tả ngôn ngữ nhỏ không nhất thiết đồng nghĩa với đơn giản. Ví dụ Swift có đặc tả lớn nhưng được định nghĩa khá lỏng. Tôi thậm chí từng phát hiện lỗi trong cú pháp integer literal khi đọc đặc tả Go
    • Nhưng đáng tiếc là 20% tính năng còn lại của Rust lại chiếm tới 80% độ hữu dụng
    • Hơn nữa Go cũng đang dần phức tạp hơn. Ví dụ sau khi thêm generic thì tính đơn giản đã giảm đi
  • Với tôi, Go giống như Rust bị đơn giản hóa quá mức. Tự động sửa mã, ép buộc kiểu vòng lặp, hay kiểm tra sự tồn tại của key trong map đều thấy bất tiện.
    Xử lý mảng hay định nghĩa enum cũng gượng gạo, và vì các quy tắc linter của công ty nên code bị chia nhỏ ra, trông cứ như Java doanh nghiệp.
    Dù vậy interface thì đơn giản, học cũng nhanh.
    Nếu Go có enum đúng nghĩa, cú pháp slice tự nhiên hơn, iterator, cú pháp rút gọn để unwrap kết quả thì sẽ tốt hơn rất nhiều

    • Một trong các điểm yếu của Go là văn hóa dùng tên biến ngắn. Việc field đầu tiên của struct hoạt động như kế thừa, hay kiểm soát truy cập bằng chữ hoa/chữ thường, cũng khá bất tiện.
      Thư viện json mặc định cũng có nhiều vấn đề như serialize slice rỗng thành null.
      Dù vậy tôi vẫn công nhận tốc độ tooling của nó rất nhanh và tính thực dụng rất cao
    • Tôi đã fork lexer/parser của Go để tạo một ngôn ngữ thử nghiệm có thêm Result[T]/Option[T], sum type, iterator, tuple, v.v. (dự án agl)
    • Go cũng có enum. Chỉ là không có sum type thôi. Mảng và slice gần như giống hệt C, chỉ là vì thiếu “magic” nên nhìn có vẻ rối hơn.
      Unwrap kết quả là chuyện cộng đồng đã bàn suốt nhiều năm nhưng vẫn chưa có lời giải gọn gàng
    • Thực ra Go đã có gói iterslices.Delete.
      Nếu bạn thường xuyên xóa phần tử ở giữa mảng thì có lẽ bạn đã chọn sai cấu trúc dữ liệu
    • Có thể xóa bằng slices.Delete, còn chuyện ép buộc kiểu if err != nil không phải vấn đề của ngôn ngữ mà là vấn đề quy tắc của đội nhóm
  • Tôi đã thoáng kỳ vọng vì tưởng Go sẽ được phát hành cho Apple II (tham khảo SWEET16)

  • Việc đóng góp vào một codebase Go mới rất dễ.
    Nhờ sự đơn giản của ngôn ngữ và các công cụ chuẩn như gofmt, golangci-lint, mọi codebase đều có cấu trúc tương tự nhau.
    Không có tranh cãi về công cụ build như ở các cộng đồng ngôn ngữ khác

    • Tôi đang cố thuyết phục các nhà khoa học chỗ tôi làm dùng formatter và linter. Tôi nghĩ quyết định ép buộc như Go là một quyết định đúng
    • Tôi mới bắt đầu học Go, và rất thích triết lý “chỉ có một cách để làm”.
      Tuy vậy cách toán tử % xử lý số âm làm tôi hơi bối rối
  • Việc đưa vào công cụ hiện đại hóa mã tự động (modernizer) rất thú vị.
    Từ gopls v0.18.0, nó dùng phân tích cú pháp để tìm các thành ngữ cũ và tự động chuyển thành mã nhanh hơn, an toàn hơn.
    Giống như gofmt đã tạo ra sự nhất quán về style, modernizer sẽ tạo ra sự nhất quán về thành ngữ

  • Nếu bật các linter như exhaustive, exhaustruct, wrapcheck trong golangci-lint thì độ an toàn tăng lên đáng kể và tốc độ phát triển cũng nhanh hơn

  • Ở công ty tôi, chúng tôi đang vận hành một chương trình onboarding 10 tuần cho lập trình viên backend Go (liên kết kế hoạch)
    Tôi đã chuyển từ Python sang Go được 7 năm, và đây là yếu tố cốt lõi cho thành công của startup

    • Tuy vậy tuyển dụng liên quan đến Go phần lớn đều đòi hỏi kiến thức DevOps (AWS, Kubernetes, CI/CD). Các vị trí thuần kỹ sư phần mềm thì hiếm
    • liên kết trực tiếp
  • Lúc đầu tôi nghi ngờ Go, nhưng giờ nó là ngôn ngữ tôi thích nhất. Đơn giản mà vẫn mạnh mẽ.
    Tuy vậy sẽ tốt hơn nếu mặc định có kiểm tra null, stack trace cho lỗi, và kiểm tra exhaustive cho sum type

    • Công cụ kiểm tra null NilAway đang được phát triển
    • Kiểm tra sum type có thể làm bằng golangci-lint
  • Tôi nghĩ Go sẽ gần như hoàn hảo nếu có thêm một chút tính năng liên quan đến lập trình hàm.
    Đặc biệt là tính bất biến, xử lý null, và switch exhaustiveness còn đáng tiếc.
    Tôi đang bù đắp bằng cách dùng NilAway của Uber, nhưng sẽ tốt hơn nếu được hỗ trợ ở cấp hệ thống kiểu

    • Có dự án tên là Borgo nhưng vẫn còn non nớt
    • Tôi mơ về Go có sum typeGo không có nil pointer. Gleam thì khá gần hướng đó nhưng lại đi theo một con đường quá khác