23 điểm bởi GN⁺ 2026-03-04 | 3 bình luận | Chia sẻ qua WhatsApp
  • Tính đơn giản của ngôn ngữ Go và đặc tính biên dịch giúp nâng cao độ ổn định của mã do AI agent tạo ra và hiệu quả thực thi
  • Nhờ kiểu tĩnh và tốc độ biên dịch nhanh, agent có thể nhanh chóng kiểm tra lỗi mã và thực hiện các vòng lặp lặp lại một cách hiệu quả
  • Các công cụ được chuẩn hóa ở cấp độ ngôn ngữ (gofmt, kiểm thử, build) giúp agent tạo mã nhất quán
  • Việc build binary đa nền tảng được hỗ trợ mặc định, cho phép agent chạy nền phân tán xác minh và thực thi cùng một mã trên nhiều hệ điều hành khác nhau
  • Nhờ những đặc điểm này, Go được đánh giá là ngôn ngữ cân bằng giữa năng suất, tính đơn giản và hiệu năng, và đang nổi lên như một lựa chọn hàng đầu cho phát triển dựa trên AI agent

Lợi ích khi Go là ngôn ngữ biên dịch

  • Agent tạo ra lượng lớn mã, nhưng phần lớn chỉ ở mức “trông có vẻ hợp lý”, nên việc xác minh xem mã có thực sự hoạt động hay không là thách thức cốt lõi
  • Khi dùng ngôn ngữ biên dịch, hệ thống kiểu mạnh và kiểu tĩnh có thể loại bỏ một số nhóm lỗi như sai kiểu hoặc dùng sai đối số ngay tại thời điểm biên dịch
  • Nếu biên dịch thành công, bạn có được sự đảm bảo rằng đó là mã đúng cú pháp trong phạm vi tiêu chuẩn của ngôn ngữ
  • So với Rust, lý do Go phù hợp với agent hơn:
    • Cú pháp và khái niệm của Go đơn giản hơn Rust
    • Hệ thống kiểu của Go kém tinh vi hơn Rust, nên mã được tạo ra gần với cách viết thành ngữ hơn và con người dễ hiểu hơn
    • Tốc độ biên dịch của Go nhanh hơn Rust, giúp rút ngắn vòng phản hồi của agent
    • Mã Go xuất hiện nhiều hơn trong dữ liệu huấn luyện so với Rust, nên mô hình tạo mã Go tốt hơn

Tính đơn giản của Go

  • Nếu đã quen với bất kỳ ngôn ngữ lập trình nào, bạn có thể đọc mã Go và nắm được cách nó hoạt động ngay lập tức, vì bản thân ngôn ngữ rất đơn giản
  • Ngay cả khi agent tạo ra lượng lớn mã Go, lập trình viên cũng không gặp quá nhiều khó khăn để theo dõi mã
  • Khi agent đôi lúc đưa ra những quyết định thiết kế kỳ lạ và tiếp tục đi theo hướng đó, sự đơn giản của ngôn ngữ giúp dễ dàng nhận ra agent đang đi tới đâu
  • Sau 12 tháng, có thể việc trực tiếp đọc mã sẽ giảm đi nên tầm quan trọng của khả năng đọc và tính đơn giản cũng giảm theo, nhưng việc vẫn có thể tự kiểm tra mã khi cần vẫn là một lựa chọn có giá trị

Cách làm được chuẩn hóa của Go

  • Go là một ngôn ngữ có tính định hướng rõ ràng (opinionated), với hướng dẫn và công cụ rõ ràng, có các cách chuẩn để chạy kiểm thử, định dạng mã và build binary
  • Cách xử lý lỗi cũng gây tranh cãi với nhiều người, nhưng nó cung cấp một mẫu hình đã được thiết lập, giúp nhiều người và agent cùng làm việc dễ dàng hơn và khuyến khích viết mã thành ngữ
  • So với JavaScript: mỗi dự án JS dùng công cụ khác nhau, và quan điểm về định dạng mã, phát hành package hay cách import thư viện bị phân tán, khiến nó kém hiệu quả với agent
  • Nhờ tính chuẩn hóa của Go, mô hình có thể nhất quán tạo ra mã Go thành ngữ dựa trên dữ liệu huấn luyện
    • Nếu yêu cầu agent định dạng mã JS, nó có thể cố cài thêm công cụ mới và thiết lập cấu hình, còn với Go thì chỉ cần chạy gofmt là xong
    • Việc viết unit test hay build binary cũng được chuẩn hóa tương tự

Build binary đa nền tảng

  • Trong Go, hỗ trợ đa nền tảng là tính năng hạng nhất (first-class citizen), đặc biệt có lợi cho phần mềm như công cụ CLI, nơi không thể kiểm soát môi trường chạy
  • Có thể chạy unit test và integration test trên nhiều môi trường bằng cùng một lệnh, để xác minh xem chức năng hiện có có bị phá vỡ hay không
  • Lợi ích này còn được tối đa hóa khi dùng agent chạy nền:
    • Xu hướng hiện nay là dần tách khỏi việc kiểm soát trực tiếp môi trường build và chạy mã, chẳng hạn kích hoạt Cursor bằng tin nhắn Slack hoặc chuyển phiên cục bộ sang từ xa
    • Mã Go có thể tạo cùng một binary trên Linux, Windows, macOS, và toàn bộ quy trình làm việc được chuẩn hóa giữa các môi trường, nên không cần quá bận tâm việc nhà cung cấp sandbox có hỗ trợ phụ thuộc phát triển hay không

Chất lượng mã Go do agent tạo ra

  • Tính đến đầu năm 2026, tỷ lệ agent tạo được mã Go hợp lệ ngay trong một lần khoảng 95% (con số dựa trên trải nghiệm cá nhân, không phải dữ liệu chính thức)
  • Cảm nhận là khi dùng agent với Go thì ít khó khăn hơn so với Python
  • Mô hình đã học đủ về thư viện, pattern và best practice của Go, nên chỉ cần định hướng là việc hiện thực tính năng gần như diễn ra khá suôn sẻ
  • Tổng lượng dữ liệu huấn luyện Go có thể ít hơn Python, nhưng trong Python có 20 cách khác nhau để làm cùng một việc, nên xét theo một thư viện cụ thể thì hiệu ứng mật độ dữ liệu huấn luyện của Go lại cao hơn
  • Lợi thế này có thể biến mất theo thời gian khi hiệu năng mô hình tăng lên và dữ liệu huấn luyện được mở rộng

Bối cảnh Bruin chọn Go

  • Bruin là một công cụ ETL mã nguồn mở, chủ yếu là một công cụ CLI được viết bằng Go
  • Dù Python là dòng chính trong hệ sinh thái dữ liệu, các ràng buộc chính dẫn đến việc chọn Go là:
    • Là công cụ điều phối dữ liệu nên xử lý đồng thời là yếu tố cốt lõi
    • Cần hệ sinh thái đủ mạnh vì phải tương tác với nhiều hệ thống như runtime ngôn ngữ hay API bên ngoài của nền tảng dữ liệu
    • Là công cụ CLI nên cần hiệu năng đủ tốt để dùng cho extension VS Code hoặc backend UI cục bộ
    • Cần xử lý lỗi có thể dự đoán được để tích hợp với nhiều hệ thống khác nhau
    • Vì chạy trên máy người dùng nên cần dễ hỗ trợ nhiều OS và kiến trúc khác nhau
  • Về yếu tố chủ quan, ngôn ngữ này cũng phải là thứ mà những người đóng góp chính cảm thấy thích làm việc cùng, và trong một nhóm nhỏ, niềm vui và năng lượng là tài nguyên khan hiếm nhất
  • Dù có nhược điểm là thiếu một số thư viện dữ liệu so với Python, họ vẫn quyết định theo trực giác rằng ưu thế về tốc độ và trải nghiệm lập trình viên (DX) của Go sẽ mang lại giá trị lớn hơn về lâu dài

Kết luận: Go trong kỷ nguyên agent

  • Ngôn ngữ lập trình đang bước vào thời đại mà con người không còn trực tiếp viết mã nữa
  • Giờ đây cần những hệ thống hỗ trợ để agent có thể viết mã hiệu quả
  • Go, nhờ sự cân bằng giữa tính dễ dùng, hiệu năng và tính phổ quát, mang lại môi trường lý tưởng để AI agent viết và chạy mã
  • Agent có thể tự động tạo ra phần mềm hiệu năng cao có thể biên dịch, kiểm thử, định dạng và triển khai lên nhiều máy khác nhau bằng Go
  • Chưa rõ Go có trở thành ngôn ngữ tối thượng cho agent hay sẽ có ngôn ngữ phù hợp hơn xuất hiện, nhưng hiện tại nhóm đang đạt được kết quả đủ tốt về năng suất và chất lượng phần mềm

3 bình luận

 
mammal 2026-03-05

Trước hết là vì tốc độ build nhanh nên rất thích.

 
tsboard 2026-03-05

Ngôn ngữ Go thực sự có một triết lý rất rõ ràng, nên với những người hợp với triết lý đó thì đây có vẻ là một lựa chọn tốt. Bản thân tôi cũng đã chuyển từ việc xây dựng backend bằng runtime JS sang Go, và tôi nghĩ mình có thể tự tin nói rằng cả hiệu năng lẫn năng suất phát triển ở mức này đều khá đáng hài lòng.

 
GN⁺ 2026-03-04
Ý kiến trên Hacker News
  • Tôi đã làm tư vấn hơn 9 tháng và liên tục xác nhận rằng Go rất phù hợp cho việc sinh mã bằng LLM
    Go cung cấp hệ thống build nhất quán, formatter, static typing và khả năng đồng thời dựa trên CSP mà không có những phần nguy hiểm như C++
    Hơn 10 năm nay không có phiên bản phá vỡ khả năng tương thích, và framework cũng hầu như không thay đổi
    Khi tôi tư vấn cho các đội ngũ tại Sancho Studio triển khai agentic coding workflow, Go cho kết quả rất ổn định trên Claude và Codex
    Trong khi đó Python hay TypeScript có quá nhiều framework và cách tiếp cận kiểu dữ liệu khác nhau nên LLM khó tạo ra đầu ra nhất quán
    Thực ra chính lý do trước đây tôi không thích Go — giới hạn về mức độ trừu tượng — lại trở thành ưu điểm đối với LLM
    go fix mới trong Go 1.26 hỗ trợ tự động refactor ở cấp độ AST để giữ codebase luôn cập nhật
    Trước đây tôi từng xây dựng PKI bằng Go trong dự án Zoom E2E Whitepaper, còn giờ thì LLM xử lý phần boilerplate lặp đi lặp lại nên sự đơn giản của Go mới thực sự phát huy giá trị

    • Tôi nghĩ phần lớn những lý do này cũng áp dụng cho Java
      Java có nhiều dữ liệu huấn luyện hơn và hệ thống kiểu mạnh hơn, nên cũng thuận lợi cho việc kiểm chứng đầu ra của LLM
    • Hoàn toàn đồng ý. Tôi đã dùng C++ hơn 20 năm, nhưng vẫn cho rằng Golang là ngôn ngữ tốt nhất cho hầu hết workflow không liên quan đến điều khiển thời gian thực hay embedded
    • Tôi rất đồng cảm với ý “giới hạn trừu tượng của Go lại là lợi thế với LLM”
      Tôi thích môi trường low-level, và rất thích stack trừu tượng nông cùng cấu trúc dễ dự đoán của Go
      Cuối cùng thì sự đơn giản và tính nhất quán đều rất hợp với LLM lẫn những lập trình viên như tôi
    • Nhìn vào chất lượng mã của các LLM gần đây, biến số lớn hơn là độ phức tạp của việc định nghĩa vấn đề chứ không phải ngôn ngữ
      Ngôn ngữ chuẩn hóa như Go giúp kết quả dễ hiểu hơn, nhưng Ruby hay C++ cũng khá ổn
      Lisp hay Bash có độ tự do cao nên kết quả khá thất thường
    • Có thể bạn đang thiên vị Go, còn tôi có nhiều kinh nghiệm hơn với TypeScript nên nhìn khác
      Xếp Python và TypeScript vào cùng một nhóm là không chính xác
      Python làm LLM bối rối vì đứt gãy giữa các phiên bản và việc bổ sung kiểu dữ liệu chậm, còn TypeScript thì nhất quán hơn nhiều
      Nếu có dịp tôi rất muốn thử một màn đấu code trực tiếp Go vs TypeScript
  • Trong phát triển agent, tôi nghĩ nên chuyển càng nhiều phần kiểm chứng càng tốt sang thời điểm biên dịch
    Go ổn nhưng hệ thống kiểu không mạnh bằng một số ngôn ngữ khác
    Rust rất hữu ích ở chỗ nếu vượt qua được lỗi compiler thì gần như không còn lỗi runtime
    Haskell có lẽ còn tốt hơn nữa

    • Một trong những lý do Rust tốt là mã test nằm cùng file
      Khi agent sửa source thì nó cũng cập nhật test cùng lúc
      Ở ngôn ngữ khác rất dễ quên phần test
    • Haskell cũng rất tuyệt, nhưng LLM có xu hướng chồng quá nhiều lớp trừu tượng
      Tôi đang làm một toy language dựa trên dependent types chạy trên Haskell, và nhờ cú pháp đơn giản nên LLM xử lý khá dễ
      Bên trong nó hoạt động giống Rust an toàn/không an toàn
    • Tôi bỏ phiếu cho Rust. Tôi nghĩ chiến lược chịu gánh nặng phức tạp từ đầu để giảm chi phí vận hành là đúng
      Vì đâu phải chúng ta trực tiếp viết nó nên hơi bất tiện một chút cũng không sao
    • Tôi cũng rất thích dùng Rust, và khả năng tương tác liên ngôn ngữ của nó rất tốt
      Có thể kết hợp với TypeScript để làm SPA, hoặc tạo ứng dụng đa nền tảng bằng Tauri, rồi gắn thêm Python sidecar
      Tôi cũng đang thử nghiệm game với Bevy và rất thích cấu trúc ECS của nó
      Tôi đã tận dụng được ưu điểm của nhiều ngôn ngữ trong khi tránh được nhược điểm của chúng
    • Tôi tò mò không biết có ai đã thử nghiệm các ngôn ngữ cấp cao như Haskell hay Prolog cùng với LLM năm 2025 chưa
  • Trong vài ngày, tôi đã bảo Gemini, Claude Code và Codex rằng “hãy thiết kế một ngôn ngữ mà các bạn muốn dùng”
    Kết quả là một ngôn ngữ kiểu Forth với hệ thống kiểu mạnh, contract, test tích hợp sẵn, fuzz test và bộ giải ràng buộc dựa trên Z3
    Tôi triển khai interpreter bằng Elixir và công khai nó thành dự án Cairn
    Một ngôn ngữ được tạo ra sau khoảng 150 commit đã chạy mà không có lỗi runtime
    Thí nghiệm này cho thấy tầm quan trọng của phân tích ở thời điểm biên dịch và công cụ kiểm thử

    • Dự án thú vị đấy, nhưng tôi nghĩ giả định rằng LLM có thể tự thiết kế ngôn ngữ có lợi cho chính nó là một tiền đề sai
      Nếu thông tin đó không có trong dữ liệu huấn luyện thì nó không thể biết được
    • Tôi ngạc nhiên vì nó gần như trùng khớp với ngôn ngữ lý tưởng của tôi
      Việc phát triển tooling cho một ngôn ngữ như vậy chắc sẽ cực kỳ thú vị
    • Tôi tò mò không biết bạn có thử bảo nó biên dịch trực tiếp sang BEAM bytecode không
    • Ấn tượng thật. Từ góc nhìn người mới bắt đầu, tôi cũng muốn biết liệu nó có dễ học hơn các ngôn ngữ họ Forth khác không
  • Tôi vẫn cho rằng OCaml là lựa chọn tốt nhất
    Nó có nhiều ưu điểm như hệ thống kiểu mạnh (bao gồm GADT), thiên về hàm thuần, tốc độ build nhanh, hỗ trợ target WASM/JS
    Việc code được đánh giá theo thứ tự trong file, nên phải xử lý phụ thuộc vòng một cách tường minh, cũng mang lại sự ổn định
    Trên hết, đây còn là một ngôn ngữ rất thú vị với con người khi sử dụng

    • Tôi tò mò dạo này multicore và xử lý bất đồng bộ của nó ra sao
      Trước đây F# đi trước ở mảng đó
    • Compiler của OCaml có khả năng phát hiện bug rất xuất sắc
      Kể cả khi agent vô tình đưa bug vào thì phần lớn vẫn bị bắt ra
    • Tôi đề xuất OCaml thay vì Go. Nhờ hệ thống kiểu giàu sức biểu đạt, nó cho phép tạo ra những mức trừu tượng mà Go không thể làm được
    • Nếu vậy thì có lẽ dùng F# còn hợp lý hơn chăng
  • Trong số PHP, Go, JavaScript và Python thì Go tốt hơn, nhưng như vậy vẫn chưa đủ để chứng minh nó là “ngôn ngữ tốt nhất”

    • Tôi thích Rust hơn. Vòng lặp phản hồi từ compiler rất tuyệt, dù cú pháp khá dài dòng
      Sự đơn giản của Go cùng hệ thống kiểu đủ dùng cũng rất hấp dẫn
    • Điều quan trọng là trong những ngôn ngữ bạn nhắc đến, Go là ngôn ngữ biên dịch duy nhất
  • Có thể tham khảo cuộc thảo luận trước đó "Why Elixir is the best language for AI"
    Khả năng runtime introspection của BEAM là một điểm rất đáng chú ý trong môi trường agent

  • Go có công cụ govulncheck để phân tích tĩnh các lỗ hổng trong mã và binary
    Nó được tích hợp rất sâu vào hệ sinh thái Go như trong hướng dẫn chính thức, và có mức độ tích hợp cao hơn nhiều ngôn ngữ khác

    • Tôi không rõ nó khác gì so với cargo-audit của Rust
      Tôi vẫn nghi ngờ việc govulncheck có thực sự phân tích lỗ hổng trong mã hay không
    • govulncheck không tìm lỗ hổng trong chính mã nguồn mà phân tích việc sử dụng dễ tổn thương của các thư viện phụ thuộc
      Khả năng lần theo call path là ưu điểm, nhưng nó vẫn khác với các công cụ phân tích tĩnh thực thụ như Coverity
      Trong Go, các bộ công cụ cộng đồng như golangci-lint có lẽ gần với điều đó hơn
    • Dù vậy, mức độ tích hợp và tính dễ dùng của govulncheck vẫn vượt trội hơn nhiều ngôn ngữ khác, rất hữu ích cho việc bảo trì các dự án lớn
  • Tôi đã viết lại dự án bằng nhiều ngôn ngữ khác nhau, và Python là ngôn ngữ hợp với Claude nhất
    Mã ngắn và dễ hiểu nên tốc độ làm việc nhanh hơn hẳn
    Tôi đã thử Go, Kotlin và JavaScript nhưng cuối cùng vẫn dừng ở Python

    • Tôi tò mò không biết trong mã Python, nó có xử lý đúng exception handling hay câu lệnh pass không
  • Go không phải lựa chọn tệ. Dữ liệu huấn luyện phong phú và API ổn định khiến LLM dễ làm việc với nó
    Nhưng tôi nghĩ Rust vẫn tốt hơn nhờ hệ thống kiểu
    Tuy vậy Rust thay đổi nhanh nên LLM khó theo kịp API mới nhất
    Haskell lại thuận lợi nhất cho LLM nhờ tốc độ thay đổi chậm và mã an toàn

    • Tôi nghĩ mã sinh bằng Haskell sẽ ngắn hơn Go và dễ đọc hơn
      Các script Python cũng dễ đọc theo cách tương tự
  • Với góc nhìn của người làm việc với agent lập trình AI hằng ngày, “ngôn ngữ tốt nhất” còn tùy thuộc vào mục đích của agent
    Sự đơn giản và dễ đoán của Go rất hợp cho các tác vụ phổ thông, nhưng TypeScript lại vượt trội trong việc tích hợp với môi trường web
    Python vẫn không có đối thủ trong mảng dữ liệu/ML
    Điều cốt lõi không phải là chọn ngôn ngữ mà LLM xử lý tốt nhất, mà là chọn ngôn ngữ phù hợp với domain của agent