- ความเรียบง่ายของภาษา Go และคุณสมบัติการคอมไพล์ ช่วยเพิ่มความเสถียรของโค้ดที่ AI เอเจนต์สร้างขึ้น และเพิ่มประสิทธิภาพในการรัน
- ด้วย static typing และความเร็วในการคอมไพล์ที่สูง เอเจนต์จึงตรวจสอบข้อผิดพลาดของโค้ดได้รวดเร็วและทำงานแบบวนซ้ำได้อย่างมีประสิทธิภาพ
- เครื่องมือที่เป็นมาตรฐานในระดับภาษา (gofmt, การทดสอบ, การบิลด์) ช่วยให้เอเจนต์สร้างโค้ดได้อย่างสม่ำเสมอ
- รองรับการบิลด์ cross-platform binary มาเป็นค่าเริ่มต้น ทำให้แบ็กกราวด์เอเจนต์สามารถตรวจสอบและรันโค้ดเดียวกันแบบกระจายบน OS ที่หลากหลายได้
- ด้วยคุณสมบัติเหล่านี้ Go จึงถูกมองว่าเป็น ภาษาที่สร้างสมดุลระหว่างประสิทธิภาพการทำงาน ความเรียบง่าย และสมรรถนะ และกำลังกลายเป็นตัวเลือกเด่นสำหรับการพัฒนาแบบอาศัย AI เอเจนต์
ข้อดีของการที่ Go เป็นภาษาคอมไพล์
- เอเจนต์สร้างโค้ดจำนวนมาก และโค้ดเหล่านั้นส่วนใหญ่มีลักษณะเพียงแค่ "ดูเหมือนใช้ได้" ดังนั้นโจทย์สำคัญคือการตรวจสอบว่าใช้งานได้จริงหรือไม่
- หากใช้ภาษาคอมไพล์ ระบบ strong typing และ static typing จะช่วยตัดบั๊กบางประเภท เช่น การใช้ type หรือ argument ผิด ออกไปได้ตั้งแต่ขั้นคอมไพล์
- หากคอมไพล์ผ่าน ก็จะได้หลักประกันว่าอย่างน้อยเป็น โค้ดที่ถูกต้องตามไวยากรณ์ ภายใต้มาตรฐานของภาษา
- เมื่อเทียบกับ Rust เหตุผลที่ Go เหมาะกับเอเจนต์มากกว่า:
- ไวยากรณ์และแนวคิดของ Go เรียบง่ายกว่า Rust
- ระบบ type ของ Go ซับซ้อนน้อยกว่า Rust ทำให้โค้ดที่สร้างออกมา ใกล้เคียงกับรูปแบบการเขียนที่เป็นสำนวนปฏิบัติทั่วไปมากกว่า และมนุษย์เข้าใจได้ง่ายกว่า
- Go คอมไพล์ได้เร็วกว่า Rust จึงช่วยย่นวงจร feedback ของเอเจนต์
- Go มีอยู่ในข้อมูลฝึกมากกว่า Rust ทำให้โมเดลสร้างโค้ด Go ได้ดีกว่า
ความเรียบง่ายของ Go
- หากคุ้นเคยกับภาษาโปรแกรมใดก็ตามอยู่แล้ว ก็สามารถ อ่านโค้ด Go และเข้าใจการทำงานได้แทบจะทันที เพราะ ตัวภาษาเองเรียบง่าย
- แม้เอเจนต์จะสร้างโค้ด Go ออกมาจำนวนมาก นักพัฒนาก็ยังตามโค้ดได้ไม่ยาก
- เวลาที่เอเจนต์ตัดสินใจด้าน การออกแบบ แบบแปลก ๆ และเดินหน้าต่อในทิศทางนั้น ความเรียบง่ายของภาษาก็ช่วยให้มองออกได้ง่ายว่าเอเจนต์กำลังมุ่งไปทางไหน
- อีก 12 เดือนข้างหน้าอาจมีโอกาสที่เราจะอ่านโค้ดด้วยตัวเองน้อยลง ทำให้ความสำคัญของความอ่านง่ายและความเรียบง่ายลดลง แต่การยังมีทางเลือกให้ตรวจดูโค้ดด้วยตนเองเมื่อจำเป็นก็ยังมีคุณค่า
ความเป็นมาตรฐานของ Go
- Go เป็นภาษาที่มีความเห็นชัดเจน (opinionated) พร้อม แนวทางและเครื่องมือที่ชัดเจน โดยมีวิธีมาตรฐานสำหรับการรันทดสอบ การจัดรูปแบบโค้ด และการบิลด์ไบนารี
- แม้รูปแบบการจัดการ error จะเป็นเรื่องที่คนชอบไม่เหมือนกัน แต่ก็ให้ แพตเทิร์นที่เป็นที่ยอมรับร่วมกันหนึ่งแบบ ซึ่งช่วยผลักดันให้เกิดการเขียนโค้ดเชิงสำนวนที่หลายคนและหลายเอเจนต์ทำงานร่วมกันได้ง่าย
- เมื่อเทียบกับ JavaScript: แต่ละโปรเจ็กต์ JS ใช้เครื่องมือต่างกัน และมีความเห็นกระจัดกระจายเกี่ยวกับการจัดรูปแบบโค้ด การแจกจ่ายแพ็กเกจ และวิธี import ไลบรารี ทำให้ไม่มีประสิทธิภาพสำหรับเอเจนต์
- ด้วยความเป็นมาตรฐานของ Go โมเดลจึงสร้าง โค้ด Go เชิงสำนวนได้อย่างสม่ำเสมอ จากข้อมูลฝึก
- ถ้าขอให้เอเจนต์จัดรูปแบบโค้ด JS มักจะพยายามติดตั้งและตั้งค่าเครื่องมือใหม่ แต่ใน Go แค่รัน
gofmt ก็จบ
- การเขียน unit test หรือการบิลด์ไบนารีก็เป็นมาตรฐานในลักษณะเดียวกัน
การบิลด์ไบนารีข้ามแพลตฟอร์ม
- ใน Go การรองรับ cross-platform เป็นความสามารถระดับ first-class citizen ซึ่งมีประโยชน์มากโดยเฉพาะกับซอฟต์แวร์อย่างเครื่องมือ CLI ที่ไม่สามารถควบคุมสภาพแวดล้อมการรันได้
- สามารถรัน unit test และ integration test ด้วยคำสั่งเดียวกันในหลายสภาพแวดล้อม เพื่อตรวจสอบว่าฟังก์ชันเดิมยังไม่พัง
- จุดเด่นนี้ยิ่งชัดเจนเมื่อใช้ แบ็กกราวด์เอเจนต์:
- แนวโน้มกำลังไปสู่การแยกออกจากการควบคุมสภาพแวดล้อม build/run โดยตรงมากขึ้น เช่น สั่งงาน Cursor ผ่านข้อความ Slack หรือส่งต่อ local session ไปยังระยะไกล
- โค้ด Go สามารถสร้างไบนารีแบบเดียวกันได้บน Linux, Windows และ macOS และกระบวนการทำงานทั้งหมดก็ เป็นมาตรฐานเดียวกัน ข้ามสภาพแวดล้อม จึงไม่ต้องกังวลว่าผู้ให้บริการ sandbox จะรองรับ dependency สำหรับการพัฒนาหรือไม่
คุณภาพของโค้ด Go ที่เอเจนต์สร้าง
- ณ ต้นปี 2026 อัตราที่เอเจนต์สามารถ สร้างโค้ด Go ที่ใช้ได้จริงตั้งแต่ครั้งแรกอยู่ที่ราว 95% (เป็นตัวเลขจากประสบการณ์ส่วนตัว ไม่ใช่ข้อมูลทางการ)
- เมื่อใช้เอเจนต์กับ Go ให้ความรู้สึกว่ามีอุปสรรคน้อยกว่า Python
- โมเดลเรียนรู้ไลบรารี แพตเทิร์น และแนวปฏิบัติที่ดีของ Go ได้มากพอ จนถ้ากำหนดทิศทางให้แล้ว การลงมือทำฟีเจอร์แทบจะเป็นเรื่องง่ายมาก
- ปริมาณข้อมูลฝึกของ Go โดยรวมอาจน้อยกว่า Python แต่ Python มี 20 วิธีที่แตกต่างกัน สำหรับงานเดียวกัน ดังนั้นถ้ามองในระดับไลบรารีเฉพาะ ผลลัพธ์คือ Go มีความหนาแน่นของข้อมูลฝึกสูงกว่า
- เมื่อประสิทธิภาพของโมเดลดีขึ้นและข้อมูลฝึกเพิ่มขึ้น ข้อได้เปรียบนี้ก็อาจหายไปตามเวลา
เหตุผลที่โปรเจ็กต์ Bruin เลือก Go
- Bruin เป็น เครื่องมือ ETL แบบโอเพนซอร์ส และเป็นเครื่องมือ CLI ที่เขียนด้วย Go เป็นหลัก
- แม้ Python จะเป็นกระแสหลักใน ecosystem ด้านข้อมูล แต่ข้อจำกัดสำคัญที่ทำให้เลือก Go คือ:
- ในฐานะเครื่องมือ orchestration ข้อมูล การจัดการ concurrency เป็นหัวใจสำคัญ
- ต้องโต้ตอบกับระบบหลากหลายประเภท เช่น language runtime หรือ API ภายนอกของแพลตฟอร์มข้อมูล จึงต้องมี ecosystem ที่เพียงพอ
- ในฐานะเครื่องมือ CLI จำเป็นต้องมี สมรรถนะที่เพียงพอ เพื่อใช้เป็นส่วนขยาย VS Code หรือแบ็กเอนด์ของ local UI
- ต้องการ การจัดการ error ที่คาดเดาได้ เพื่อผสานรวมกับระบบหลากหลายแบบ
- เนื่องจากทำงานบนเครื่องของผู้ใช้ จึงต้องรองรับ OS และสถาปัตยกรรมที่หลากหลายได้ง่าย
- ในเชิงอัตวิสัย ยังต้องเป็นภาษาที่ผู้ร่วมพัฒนาหลัก ทำงานได้อย่างสนุก เพราะสำหรับทีมเล็ก ความสนุกและพลังงานคือทรัพยากรที่หายากที่สุด
- แม้จะมีข้อเสียเรื่องขาดไลบรารีข้อมูลบางอย่างเมื่อเทียบกับ Python แต่ก็ตัดสินใจจากสัญชาตญาณว่า ข้อดีด้าน ความเร็วและประสบการณ์นักพัฒนา (DX) ของ Go จะสร้างคุณค่าระยะยาวได้มากกว่า
บทสรุป: Go ในยุคของเอเจนต์
- ภาษาการเขียนโปรแกรมกำลังเข้าสู่ยุคที่ มนุษย์ไม่ได้เขียนโค้ดด้วยตนเองโดยตรง
- ตอนนี้เราต้องการ ระบบที่ช่วยสนับสนุนให้เอเจนต์เขียนโค้ดได้อย่างมีประสิทธิภาพ
- Go มอบสภาพแวดล้อมที่เหมาะอย่างยิ่งให้ AI เอเจนต์ใช้เขียนและรันโค้ด ด้วย สมดุลระหว่างการใช้งาน ประสิทธิภาพ และความเป็นสากล
- เอเจนต์สามารถสร้าง ซอฟต์แวร์สมรรถนะสูงที่คอมไพล์ ทดสอบ จัดรูปแบบ และนำไป deploy บนเครื่องหลากหลายแบบได้ โดยอัตโนมัติด้วย Go
- ยังไม่แน่ชัดว่า Go จะกลายเป็นภาษาสุดท้ายสำหรับเอเจนต์ หรือจะมีภาษาที่เหมาะกว่าเกิดขึ้นหรือไม่ แต่ขณะนี้ทีมกำลังได้ผลลัพธ์ที่ดีมากทั้งในด้าน productivity และคุณภาพซอฟต์แวร์
3 ความคิดเห็น
อย่างแรกเลยคือมันคอมไพล์เร็ว เลยชอบครับ
ภาษา GO มีคอนเซปต์ที่ชัดเจนมากจริง ๆ และดูเหมือนว่าสำหรับคนที่เข้ากับคอนเซปต์ที่ชัดเจนนี้ได้ มันก็จะเป็นตัวเลือกที่ดี ผมเองก็ย้ายจากการทำแบ็กเอนด์ด้วยรันไทม์ JS มาใช้ GO แล้ว และคิดว่าสามารถตอบได้อย่างมั่นใจว่าทั้งประสิทธิภาพและผลิตภาพในการพัฒนานั้นน่าพอใจในระดับนี้ครับ
ความคิดเห็นใน Hacker News
ผมทำงานคอนซัลต์มานานกว่า 9 เดือน และยิ่งมั่นใจว่า Go เหมาะมากกับการสร้างโค้ดด้วย LLM
Go มีระบบบิลด์ที่สม่ำเสมอ, formatter, static typing และ concurrency แบบ CSP โดยไม่มีส่วนอันตรายแบบ C++
ตลอดกว่า 10 ปี แทบไม่มีเวอร์ชันที่ทำลายความเข้ากันได้ และการเปลี่ยนแปลงของเฟรมเวิร์กก็มีน้อยมาก
เวลาที่ผมแนะนำทีมต่าง ๆ ที่ Sancho Studio ให้นำ agentic coding workflow มาใช้ Go ให้ผลลัพธ์ที่เสถียรมากใน Claude และ Codex
ตรงกันข้าม Python หรือ TypeScript มีความหลากหลายทั้งเรื่องเฟรมเวิร์กและแนวทางด้าน type มากเกินไป ทำให้ LLM สร้างผลลัพธ์ที่สม่ำเสมอได้ยาก
จริง ๆ แล้วเหตุผลที่ผมเคยไม่ชอบ Go — ข้อจำกัดด้าน abstraction — กลับกลายเป็นข้อดีสำหรับ LLM
go fixตัวใหม่ใน Go 1.26 รองรับการรีแฟกเตอร์อัตโนมัติในระดับ AST ทำให้คงโค้ดเบสให้ทันสมัยได้ก่อนหน้านี้ผมเคยสร้าง PKI ด้วย Go ในโปรเจกต์ Zoom E2E Whitepaper และตอนนี้ LLM มาช่วยจัดการ boilerplate ที่ซ้ำ ๆ ได้ ทำให้ความเรียบง่ายของ Go ฉายแสงจริง ๆ
Java มีข้อมูลสำหรับการเรียนรู้มากกว่าและมี type system ที่แข็งแรงกว่า จึงได้เปรียบในการตรวจสอบผลลัพธ์จาก LLM ด้วย
ผมชอบสภาพแวดล้อมระดับล่าง และชอบ abstraction stack ที่ตื้นกับโครงสร้างที่คาดเดาได้ของ Go
สุดท้ายแล้ว ความเรียบง่ายและความสม่ำเสมอ เข้ากันได้ดีกับทั้ง LLM และนักพัฒนาอย่างผม
ภาษาที่มีมาตรฐานชัดเจนอย่าง Go ทำให้เข้าใจผลลัพธ์ได้ง่าย แต่ Ruby หรือ C++ ก็ทำได้ดีพอสมควรเหมือนกัน
ส่วน Lisp หรือ Bash มีอิสระมากเกินไป ทำให้ผลลัพธ์ไม่นิ่ง
การจับ Python กับ TypeScript ไว้ในกลุ่มเดียวกันนั้นไม่แม่นนัก
Python ทำให้ LLM สับสนเพราะมีความไม่ต่อเนื่องระหว่างเวอร์ชันและนำระบบ type มาใช้ช้า แต่ TypeScript มีความสม่ำเสมอกว่ามาก
ถ้ามีโอกาส ผมอยากลองทำ ศึกเขียนโค้ดสด Go vs TypeScript ดู
สำหรับการพัฒนาเอเจนต์ ผมคิดว่าควรย้ายการตรวจสอบให้มากที่สุดไปไว้ที่ คอมไพล์ไทม์
Go ก็โอเค แต่ type system ของมันยังไม่แข็งแรงเท่าภาษาอื่นบางตัว
Rust มีประโยชน์มากตรงที่ถ้าผ่าน compiler error ไปได้แล้ว แทบจะไม่มี runtime error
Haskell น่าจะดีกว่าอีกด้วยซ้ำ
เวลาเอเจนต์แก้ซอร์สก็จะอัปเดตเทสต์ไปพร้อมกัน
ในภาษาอื่นมักลืมเทสต์ได้ง่าย
ผมกำลังสร้าง ภาษาเล่น ๆ ที่อิง dependent types บน Haskell และด้วยไวยากรณ์ที่เรียบง่ายทำให้ LLM จัดการได้ง่าย
ภายในมันทำงานคล้าย Rust แบบ safe/unsafe
ยังไงเราไม่ได้เป็นคนเขียนเองทั้งหมด ความไม่สะดวกเล็กน้อยเลยรับได้
จะใช้คู่กับ TypeScript เพื่อทำ SPA, ใช้ Tauri ทำแอปหลายแพลตฟอร์ม หรือพ่วง Python sidecar ก็ได้
ตอนนี้กำลังลองทำเกมด้วย Bevy และชอบโครงสร้าง ECS ของมันมาก
ผมสามารถรวมข้อดีของหลายภาษาเข้าด้วยกันพร้อมหลีกเลี่ยงข้อเสียได้
หลายวันก่อนผมลองสั่ง Gemini, Claude Code และ Codex ว่า “ลองออกแบบภาษาที่พวกคุณอยากใช้เองสิ”
ผลที่ได้คือ ภาษาสไตล์ Forth ที่มี type system แข็งแรง, contracts, การทดสอบแบบ native, fuzz testing และตัวแก้ constraint ที่ใช้ Z3
ผมเขียน interpreter ด้วย Elixir และเปิดซอร์สไว้เป็น โปรเจกต์ Cairn
ภาษานี้สร้างขึ้นด้วยประมาณ 150 commits และทำงานได้โดยไม่มี runtime error
การทดลองนี้แสดงให้เห็นถึง ความสำคัญของการวิเคราะห์ตอนคอมไพล์และเครื่องมือทดสอบ
ถ้าข้อมูลนั้นไม่มีอยู่ในชุดฝึก มันก็ไม่มีทางรู้ได้
การพัฒนา tooling สำหรับภาษาลักษณะนี้น่าจะสนุกมากจริง ๆ
ผมยังคิดว่า OCaml คือทางเลือกที่ดีที่สุดอยู่ดี
มันมีข้อดีมากมาย เช่น type system ที่ทรงพลัง (รวม GADT), เน้น pure function, บิลด์เร็ว และรองรับ target อย่าง WASM/JS
โค้ดถูกประมวลผลตามลำดับภายในไฟล์ จึงต้องจัดการ dependency แบบวนลูป อย่างชัดเจน ซึ่งช่วยเพิ่มความเสถียร
ที่สำคัญคือมันเป็นภาษาที่มนุษย์เองก็เขียนอย่างมีความสุข
เมื่อก่อน F# นำหน้าอยู่ในด้านนั้น
ถึงเอเจนต์จะเผลอใส่บั๊กเข้ามา ส่วนใหญ่ก็มักจะจับได้
ถ้าเลือกจาก PHP, Go, JavaScript และ Python งั้น Go ก็ดีกว่า แต่ก็ยังเป็นเหตุผลที่อ่อนเกินไปจะบอกว่าเป็น “ภาษาที่ดีที่สุด”
ส่วนความเรียบง่ายของ Go กับ type system ที่เพียงพอก็มีเสน่ห์เหมือนกัน
ลองดูประเด็นที่คุยกันก่อนหน้านี้ใน "Why Elixir is the best language for AI" ได้
ความสามารถด้าน runtime introspection ของ BEAM เป็นจุดที่น่าสนใจในบริบทของเอเจนต์
บทความนี้วิจารณ์ Go ค่อนข้างชัด
Go มีเครื่องมือ govulncheck สำหรับวิเคราะห์ช่องโหว่แบบสถิตทั้งในโค้ดและไบนารี
มันฝังรวมอยู่ใน ecosystem ของ Go อย่างลึกซึ้งเหมือนในบทช่วยสอนทางการ และมีระดับการบูรณาการที่สูงกว่าภาษาอื่น
ก็ยังสงสัยว่า govulncheck วิเคราะห์ช่องโหว่ในโค้ดจริง ๆ ได้ไหม
จุดเด่นคือมันตามเส้นทางการเรียกใช้ได้ แต่ก็ยังไม่ใช่เครื่องมือ static analysis แท้ ๆ แบบ Coverity
สำหรับ Go ผมมองว่าชุดเครื่องมือชุมชนอย่าง
golangci-lintจะใกล้เคียงกว่าผมเคยลองเขียนโปรเจกต์เดิมใหม่ด้วยหลายภาษา และพบว่า Python เข้ากับ Claude มากที่สุด
โค้ดมีขนาดเล็กและเข้าใจง่าย ทำให้งานเดินเร็วขึ้นมาก
ผมลอง Go, Kotlin และ JavaScript ด้วย แต่สุดท้ายก็มาจบที่ Python
Go เป็นตัวเลือกที่ไม่เลว ข้อมูลฝึกมีเยอะและ API ค่อนข้างเสถียร ทำให้ LLM จัดการได้ง่าย
แต่ผมคิดว่า Rust ดีกว่าเพราะมี type system ที่แข็งแรงกว่า
เพียงแต่ Rust เปลี่ยนเร็ว ทำให้ LLM ตาม API ล่าสุดได้ยาก
ส่วน Haskell ได้เปรียบที่สุดสำหรับ LLM เพราะเปลี่ยนช้าและได้โค้ดที่ปลอดภัย
สคริปต์ Python ก็อ่านง่ายในลักษณะคล้ายกัน
ในฐานะคนที่ทำงานกับ AI coding agent ทุกวัน ผมคิดว่า “ภาษาที่ดีที่สุด” ขึ้นอยู่กับ เป้าหมายของเอเจนต์
ความเรียบง่ายและความคาดเดาได้ของ Go เหมาะกับงานทั่วไป แต่ TypeScript โดดเด่นมากเมื่อเชื่อมกับสภาพแวดล้อมเว็บ
Python ก็ยังไร้คู่แข่งในสาย data/ML
ประเด็นสำคัญไม่ใช่เลือกภาษาที่ LLM ถนัดที่สุด แต่คือการเลือก ภาษาให้เหมาะกับโดเมนของเอเจนต์