- เนื่องในโอกาสครบรอบ 16 ปีของการเปิดซอร์สโค้ด ของภาษา Go จึงมีการสรุปความก้าวหน้าทางเทคนิคสำคัญในช่วง 1 ปีที่ผ่านมาและแผนในอนาคต
- ใน Go 1.24 และ 1.25 มีการปรับปรุงครั้งใหญ่ครอบคลุมทั้งด้าน การทดสอบ·ความปลอดภัย·ประสิทธิภาพ
synctest, container-aware scheduling, flight recorder ช่วยเสริมความน่าเชื่อถือและประสิทธิภาพของระบบในสภาพแวดล้อมจริง
- การเตรียม การรับรอง FIPS 140-3 สำหรับแพ็กเกจเข้ารหัสลับ และ Green Tea GC ช่วยยกระดับทั้งความปลอดภัยและประสิทธิภาพ
- ระบบนิเวศของ Go กำลังขยายไปสู่ การพัฒนาแบบผสาน AI และการทำโค้ดอัตโนมัติสมัยใหม่ และมีแผนรองรับฮาร์ดแวร์ขนาดใหญ่และ AI มากขึ้นในอนาคต
ภาพรวมครบรอบ 16 ปีของ Go และรีลีสล่าสุด
- ฉลองครบรอบ 16 ปีของการเปิดซอร์สโค้ดของ Go ในวันที่ 10 พฤศจิกายน
- Go 1.24 ในเดือนกุมภาพันธ์ 2024 และ Go 1.25 ในเดือนสิงหาคมถูกปล่อยตามรอบรีลีสปกติ
- ทั้งสองเวอร์ชันมี API สำหรับการพัฒนาซอฟต์แวร์ที่เชื่อถือได้, การเสริมความปลอดภัย, และ การปรับปรุงประสิทธิภาพรันไทม์
- ทีม Go กำลังผลักดัน การพัฒนา AI แบบผสานรวม·เอเจนต์·อินฟราสตรักเจอร์บน Go เพื่อตอบรับ การเปลี่ยนแปลงในยุค generative AI
การปรับปรุงหลักของภาษาและไลบรารีมาตรฐาน
- แพ็กเกจ
testing/synctest ซึ่งเริ่มนำมาใช้แบบทดลองใน Go 1.24 และเป็นทางการใน 1.25 ช่วยให้การทดสอบโค้ดแบบ asynchronous และขนานทำได้ง่ายขึ้น
- ด้วยการทำ virtualization ของเวลา ช่วยเปลี่ยนการทดสอบที่ช้าหรือไม่เสถียรให้เป็นการทดสอบที่เชื่อถือได้และให้ผลทันที
- มีโครงสร้างที่ผสานลึกกับ Go runtime และไลบรารีมาตรฐาน
- API
testing.B.Loop ปรับปรุงการใช้งานของ benchmark API เดิม (B.N) และแก้กับดักการใช้งานแบบเดิม
- มีการเพิ่ม API สำหรับการจัดการ cleanup และการแสดง log ของการทดสอบที่อิง
Context เพื่อเพิ่มประสิทธิภาพการจัดการการทดสอบ
- Go 1.25 นำ container-aware scheduling มาใช้เพื่อปรับระดับการประมวลผลขนานภายในคอนเทนเนอร์โดยอัตโนมัติ
- ช่วยป้องกัน CPU throttling และลด latency
- ความสามารถ flight recorder ขยายตัวติดตามการทำงาน ทำให้บันทึกเหตุการณ์ก่อนหน้าได้อย่างละเอียดหลังเกิดข้อผิดพลาด
การพัฒนาซอฟต์แวร์ที่เน้นความปลอดภัย
- แพ็กเกจเข้ารหัสลับ ของ Go ผ่านการตรวจสอบจากบริษัทความปลอดภัยอิสระ Trail of Bits โดยพบ ประเด็นเดียวที่มีความรุนแรงต่ำ
- ด้วยความร่วมมือระหว่าง Go Security Team และ Geomys ทำให้ได้รับ การรับรอง CAVP และเตรียมพร้อมสำหรับ การรับรอง FIPS 140-3
- ช่วยเพิ่มการใช้งาน Go ในสภาพแวดล้อมที่มีข้อกำกับดูแล และลดการพึ่งพาโซลูชันที่ไม่เป็นทางการเดิม
- ไลบรารีมาตรฐานของ Go กำลังพัฒนาไปในทิศทาง safe by default
- API
os.Root ใน Go 1.24 ช่วยป้องกันช่องโหว่ path traversal ระหว่างการเข้าถึงไฟล์ระบบ
การปรับปรุงโครงสร้างภายในและประสิทธิภาพ
- ใน Go 1.24 มีการ ออกแบบ implementation ของ
map ใหม่ทั้งหมด โดยสะท้อนแนวทางการออกแบบ hash table สมัยใหม่
- เพิ่มประสิทธิภาพ ลด latency และปรับปรุงประสิทธิภาพการใช้หน่วยความจำ
- Green Tea garbage collector ใน Go 1.25 ลด GC overhead ได้ 10~40%
- ใช้อัลกอริทึมใหม่ที่ออกแบบให้เหมาะกับฮาร์ดแวร์สมัยใหม่
- ใน Go 1.26 มีแผนเพิ่มประสิทธิภาพอีก 10% บนฮาร์ดแวร์ที่รองรับ AVX-512
- มีแผนเปิดใช้เป็นค่าเริ่มต้นตั้งแต่ Go 1.26
การขยายสแตกการพัฒนาและการผสาน AI
- Go กำลังก้าวจากการเป็นเพียงภาษาไปสู่ แพลตฟอร์มการพัฒนาที่สมบูรณ์
- gopls language server ได้รับการเสริมความสามารถผ่าน 4 รีลีสปกติ (v0.17~v0.20)
- เพิ่ม code analyzer, refactoring, การจัดการ JSON tag, และ MCP built-in server
- มีการเพิ่มฟีเจอร์ modernizer สำหรับการปรับโค้ดให้ทันสมัยโดยอัตโนมัติ
- แปลงแพตเทิร์นโค้ดแบบเก่าให้เป็นรูปแบบใหม่ที่ปลอดภัยกว่าโดยอัตโนมัติ
- ผสานกับฟีเจอร์คำแนะนำใน IDE เพื่อช่วยรักษาความสอดคล้องของโค้ดและสนับสนุนการเรียนรู้ของระบบช่วยเขียนโค้ด AI
- ใน Go 1.26 มีแผนปรับคำสั่ง
go fix ให้รองรับการใช้ modernizer ทั้งชุดในครั้งเดียว
- จากความร่วมมือกับ Anthropic และชุมชน มีการเปิดตัว Go SDK อย่างเป็นทางการ v1.0.0 สำหรับ Model Context Protocol (MCP)
- รองรับทั้ง MCP client และ server โดยอิงความสามารถ MCP ของ gopls
- ADK for Go ของ Google มอบเฟรมเวิร์กสำหรับพัฒนาระบบ multi-agent บน MCP SDK
- แสดงให้เห็นว่า concurrency·ประสิทธิภาพ·ความน่าเชื่อถือ ของ Go เหมาะกับการพัฒนา AI ระดับ production
แผนในอนาคตและชุมชน
- มีแผนสำหรับ การพร้อมใช้งานทั่วไปของ Green Tea GC, การรองรับฮาร์ดแวร์ SIMD, และ การเสริม scalability แบบหลายคอร์
- กำลังดำเนินงานด้าน การอัปเกรดครั้งใหญ่ของ
encoding/json, การทำ profiling ของ goroutine leak, และ การปรับปรุง net/http·unicode
- ขยาย ภาษา·เครื่องมือ·ระบบวินิจฉัย เพื่อรองรับการผสาน Go กับ AI
- โครงการโอเพนซอร์ส Go ตั้งเป้าขยายทั้ง ชุมชนผู้มีส่วนร่วม และ ความสามารถในการขยายกระบวนการพัฒนา
- พัฒนาการของ Go ตั้งอยู่บน การมีส่วนร่วมของผู้ใช้และชุมชนผู้พัฒนา และบ่งชี้ถึงการเติบโตอย่างต่อเนื่องในอนาคต
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
ฉันชอบ Go มาก โดยเฉพาะในสภาพแวดล้อมแบบ monorepo มันยิ่งโดดเด่นมาก เวลาเพิ่มแอปใหม่ก็แค่สร้างโฟลเดอร์หนึ่งอันแล้วใส่ไฟล์ go ที่มีฟังก์ชัน
main()เท่านั้น จาก root รันgo install ./...ก็ build ทั้งหมดได้อย่างรวดเร็วเวลาต้องทำโปรแกรม CLI อย่างรวดเร็ว ความเรียบง่ายนี้ถือว่าเป็น ตัวเปลี่ยนเกม จริง ๆ
เมื่อก่อนคนชอบพูดว่าภาษาไม่ใช่คอขวด แต่ตอนเห็น Go ครั้งแรก ฉันรู้สึกว่า “อันนี้ต่างออกไป” เรียนรู้ได้เร็วมากจริง ๆ — น่าจะเพราะสเปกภาษามันเล็ก
ความรู้สึกคือได้ 80% ของ Rust ด้วยความพยายาม 20%
สำหรับฉัน Go เหมือน Rust ที่ถูกลดทอนจนเรียบเกินไป การแก้โค้ดอัตโนมัติ การบังคับรูปแบบ loop และการตรวจว่ามี key ใน map หรือไม่ก็ยังไม่สะดวก
การจัดการ array หรือการประกาศ enum ก็ยังดูขัด ๆ และเพราะ กฎ linter ของบริษัท โค้ดเลยถูกแยกย่อยจนคล้าย enterprise Java ไปเลย
ถึงอย่างนั้น interface ก็ยังเรียบง่ายและเรียนรู้ได้เร็ว
ถ้า Go มี enum ที่ดีกว่านี้, ไวยากรณ์ slice ที่เป็นธรรมชาติ, iterator, และ ไวยากรณ์ลัดสำหรับการ unwrap ผลลัพธ์ มันคงจะดีกว่านี้มาก
ไลบรารี json พื้นฐานก็มีปัญหาเยอะ เช่น serialize slice ว่างให้เป็น null
ถึงอย่างนั้น ความเร็วของ tooling ก็ยังดีมาก และยอมรับได้ว่ามันใช้งานจริงได้ดี
เรื่อง การ unwrap ผลลัพธ์ นั้นชุมชนคุยกันมานานแล้ว แต่ยังไม่มีทางออกที่ลงตัว
ถ้าคุณลบ element ตรงกลาง array บ่อย ๆ แปลว่าเลือกโครงสร้างข้อมูลผิดแล้ว
slices.Deleteได้อยู่แล้ว และเรื่องการบังคับif err != nilก็ไม่ใช่ปัญหาของภาษา แต่เป็น ปัญหาจากกฎของทีมตอนแรกฉันนึกว่า Go จะ ออกบน Apple II เลยแอบตื่นเต้นอยู่พักหนึ่ง (ดู SWEET16)
การเข้าไปมีส่วนร่วมกับ codebase Go ใหม่ ๆ ทำได้ง่าย
เพราะความเรียบง่ายของภาษาและเครื่องมือมาตรฐานอย่าง gofmt, golangci-lint ทำให้ทุก codebase มีโครงสร้างคล้ายกัน
ไม่มีการถกเถียงเรื่อง build tool เหมือนในชุมชนภาษาอื่น
เพียงแต่พฤติกรรมของตัวดำเนินการ
%กับค่าติดลบทำให้สับสนเล็กน้อยการเพิ่ม เครื่องมือปรับโค้ดให้ทันสมัยอัตโนมัติ (modernizer) น่าสนใจมาก
ตั้งแต่ gopls v0.18.0 เป็นต้นมา มันใช้การวิเคราะห์ไวยากรณ์เพื่อหา idiom แบบเก่าแล้ว แปลงอัตโนมัติให้เป็นโค้ดที่เร็วและปลอดภัยกว่า
เหมือนที่ gofmt ทำให้สไตล์สอดคล้องกัน modernizer ก็น่าจะทำให้ idiom มีความสอดคล้องกัน ด้วย
ใน golangci-lint ถ้าเปิด linter อย่าง exhaustive, exhaustruct, wrapcheck จะช่วยเพิ่ม ความปลอดภัย อย่างมากและทำให้พัฒนาได้เร็วขึ้น
บริษัทของเรากำลังใช้ โปรแกรม onboarding 10 สัปดาห์ สำหรับนักพัฒนา Go ฝั่ง backend (ลิงก์แผน)
ฉันย้ายจาก Python มา Go ได้ 7 ปีแล้ว และนี่คือ ปัจจัยสำคัญต่อความสำเร็จของสตาร์ตอัป
ตอนแรกฉันก็สงสัยใน Go แต่ตอนนี้มันเป็นภาษาที่ชอบที่สุด เรียบง่ายแต่ทรงพลัง
เพียงแต่อยากให้มี การตรวจ null, error stack trace, และ การตรวจ exhaustive ของ sum type มาให้ในตัว
รู้สึกว่า Go จะสมบูรณ์แบบถ้ามีฟีเจอร์ด้าน functional programming เพิ่มขึ้นอีกหน่อย
โดยเฉพาะ immutability, การจัดการ null, และ switch exhaustiveness ที่ยังน่าเสียดาย
ตอนนี้เสริมด้วย NilAway ของ Uber อยู่ แต่ถ้ารองรับในระดับ type system ได้จะดีกว่า