11 คะแนน โดย GN⁺ 2025-11-16 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เนื่องในโอกาสครบรอบ 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 ความคิดเห็น

 
GN⁺ 2025-11-16
ความคิดเห็นจาก Hacker News
  • ฉันชอบ Go มาก โดยเฉพาะในสภาพแวดล้อมแบบ monorepo มันยิ่งโดดเด่นมาก เวลาเพิ่มแอปใหม่ก็แค่สร้างโฟลเดอร์หนึ่งอันแล้วใส่ไฟล์ go ที่มีฟังก์ชัน main() เท่านั้น จาก root รัน go install ./... ก็ build ทั้งหมดได้อย่างรวดเร็ว
    เวลาต้องทำโปรแกรม CLI อย่างรวดเร็ว ความเรียบง่ายนี้ถือว่าเป็น ตัวเปลี่ยนเกม จริง ๆ

    • ก็สงสัยเหมือนกันว่า ภาษาอื่น ๆ เกือบทั้งหมดก็น่าจะทำแบบนี้ได้ไม่ใช่หรือ
    • คิดว่ากรณีการใช้งาน monorepo แบบนี้ ควรถูกพูดถึงให้บ่อยกว่านี้
  • เมื่อก่อนคนชอบพูดว่าภาษาไม่ใช่คอขวด แต่ตอนเห็น Go ครั้งแรก ฉันรู้สึกว่า “อันนี้ต่างออกไป” เรียนรู้ได้เร็วมากจริง ๆ — น่าจะเพราะสเปกภาษามันเล็ก
    ความรู้สึกคือได้ 80% ของ Rust ด้วยความพยายาม 20%

    • ข้อดีของ Go คือสามารถเรียนรู้ทั้งภาษาได้ครบในเวลาไม่นาน รวมถึง concurrency และจุดที่ควรระวังด้วย ตรงกันข้ามกับ C# หรือ C++ ที่ซับซ้อนเกินไปจนแทบไม่มีใครเข้าใจทั้งระบบจริง ๆ
    • อย่างที่ Rob Pike พูดไว้ Go เป็นภาษาที่ออกแบบมาเพื่อ นักพัฒนาระดับจูเนียร์ และมีเป้าหมายสำคัญคือเพื่อลดเวลา build ภายใน Google ด้วย เลยทำให้ถ้ามี dependency ที่ไม่ได้ใช้จะเกิด compile error (ที่มา)
    • แต่สเปกภาษาที่เล็กก็ไม่ได้แปลว่าเรียบง่ายเสมอไป เช่น Swift แม้สเปกจะใหญ่แต่กลับนิยามแบบหลวม ๆ ถึงขั้นที่ฉันเคยเจอข้อผิดพลาดใน ไวยากรณ์ integer literal ตอนอ่านสเปกของ Go
    • แต่ก็น่าเสียดายที่ 20% ที่เหลือของ Rust กลับคิดเป็น 80% ของประโยชน์ใช้งานจริง
    • แถม Go เองก็ค่อย ๆ ซับซ้อนขึ้นเหมือนกัน เช่นหลังจากเพิ่ม generics เข้ามา ความเรียบง่ายก็ลดลง
  • สำหรับฉัน Go เหมือน Rust ที่ถูกลดทอนจนเรียบเกินไป การแก้โค้ดอัตโนมัติ การบังคับรูปแบบ loop และการตรวจว่ามี key ใน map หรือไม่ก็ยังไม่สะดวก
    การจัดการ array หรือการประกาศ enum ก็ยังดูขัด ๆ และเพราะ กฎ linter ของบริษัท โค้ดเลยถูกแยกย่อยจนคล้าย enterprise Java ไปเลย
    ถึงอย่างนั้น interface ก็ยังเรียบง่ายและเรียนรู้ได้เร็ว
    ถ้า Go มี enum ที่ดีกว่านี้, ไวยากรณ์ slice ที่เป็นธรรมชาติ, iterator, และ ไวยากรณ์ลัดสำหรับการ unwrap ผลลัพธ์ มันคงจะดีกว่านี้มาก

    • ข้อเสียอย่างหนึ่งของ Go คือวัฒนธรรมการใช้ ชื่อตัวแปรสั้น ๆ และยังมีเรื่องที่ field แรกของ struct ทำงานคล้ายการสืบทอด หรือการควบคุมการเข้าถึงด้วยตัวพิมพ์ใหญ่/เล็กที่ไม่ค่อยสะดวก
      ไลบรารี json พื้นฐานก็มีปัญหาเยอะ เช่น serialize slice ว่างให้เป็น null
      ถึงอย่างนั้น ความเร็วของ tooling ก็ยังดีมาก และยอมรับได้ว่ามันใช้งานจริงได้ดี
    • ฉันเคย fork lexer/parser ของ Go แล้วทำภาษาเชิงทดลองที่เพิ่ม Result[T]/Option[T], sum type, iterator, tuple ฯลฯ เข้าไป (โปรเจกต์ agl)
    • จริง ๆ Go ก็มี enum อยู่แล้ว เพียงแต่ไม่มี sum type เท่านั้น ส่วน array กับ slice ก็แทบจะเหมือน C และเพราะมันมี “magic” น้อย เลยอาจดูสับสนมากกว่า
      เรื่อง การ unwrap ผลลัพธ์ นั้นชุมชนคุยกันมานานแล้ว แต่ยังไม่มีทางออกที่ลงตัว
    • จริง ๆ แล้ว Go มีทั้ง แพ็กเกจ iter และ slices.Delete อยู่แล้ว
      ถ้าคุณลบ element ตรงกลาง array บ่อย ๆ แปลว่าเลือกโครงสร้างข้อมูลผิดแล้ว
    • ลบด้วย slices.Delete ได้อยู่แล้ว และเรื่องการบังคับ if err != nil ก็ไม่ใช่ปัญหาของภาษา แต่เป็น ปัญหาจากกฎของทีม
  • ตอนแรกฉันนึกว่า Go จะ ออกบน Apple II เลยแอบตื่นเต้นอยู่พักหนึ่ง (ดู SWEET16)

  • การเข้าไปมีส่วนร่วมกับ codebase Go ใหม่ ๆ ทำได้ง่าย
    เพราะความเรียบง่ายของภาษาและเครื่องมือมาตรฐานอย่าง gofmt, golangci-lint ทำให้ทุก codebase มีโครงสร้างคล้ายกัน
    ไม่มีการถกเถียงเรื่อง build tool เหมือนในชุมชนภาษาอื่น

    • ฉันกำลังพยายามโน้มน้าวให้นักวิทยาศาสตร์ที่ทำงานด้วยกันใช้ ตัวจัดรูปแบบโค้ดและ linter อยู่ คิดว่าการบังคับแบบที่ Go ทำเป็นการตัดสินใจที่ดี
    • เพิ่งเริ่มเรียน Go ได้ไม่นาน แต่ชอบแนวคิดแบบ “มีวิธีเดียวให้ทำ”
      เพียงแต่พฤติกรรมของตัวดำเนินการ % กับค่าติดลบทำให้สับสนเล็กน้อย
  • การเพิ่ม เครื่องมือปรับโค้ดให้ทันสมัยอัตโนมัติ (modernizer) น่าสนใจมาก
    ตั้งแต่ gopls v0.18.0 เป็นต้นมา มันใช้การวิเคราะห์ไวยากรณ์เพื่อหา idiom แบบเก่าแล้ว แปลงอัตโนมัติให้เป็นโค้ดที่เร็วและปลอดภัยกว่า
    เหมือนที่ gofmt ทำให้สไตล์สอดคล้องกัน modernizer ก็น่าจะทำให้ idiom มีความสอดคล้องกัน ด้วย

  • ใน golangci-lint ถ้าเปิด linter อย่าง exhaustive, exhaustruct, wrapcheck จะช่วยเพิ่ม ความปลอดภัย อย่างมากและทำให้พัฒนาได้เร็วขึ้น

  • บริษัทของเรากำลังใช้ โปรแกรม onboarding 10 สัปดาห์ สำหรับนักพัฒนา Go ฝั่ง backend (ลิงก์แผน)
    ฉันย้ายจาก Python มา Go ได้ 7 ปีแล้ว และนี่คือ ปัจจัยสำคัญต่อความสำเร็จของสตาร์ตอัป

    • แต่ตำแหน่งงาน Go ส่วนใหญ่ต้องการ ความรู้ด้าน DevOps (AWS, Kubernetes, CI/CD) ด้วย ตำแหน่งซอฟต์แวร์เอนจิเนียร์ล้วน ๆ มีไม่มาก
    • ลิงก์ตรง
  • ตอนแรกฉันก็สงสัยใน Go แต่ตอนนี้มันเป็นภาษาที่ชอบที่สุด เรียบง่ายแต่ทรงพลัง
    เพียงแต่อยากให้มี การตรวจ null, error stack trace, และ การตรวจ exhaustive ของ sum type มาให้ในตัว

    • ตอนนี้มีการพัฒนาเครื่องมือตรวจ null อย่าง NilAway
    • การตรวจ sum type ทำได้ด้วย golangci-lint
  • รู้สึกว่า Go จะสมบูรณ์แบบถ้ามีฟีเจอร์ด้าน functional programming เพิ่มขึ้นอีกหน่อย
    โดยเฉพาะ immutability, การจัดการ null, และ switch exhaustiveness ที่ยังน่าเสียดาย
    ตอนนี้เสริมด้วย NilAway ของ Uber อยู่ แต่ถ้ารองรับในระดับ type system ได้จะดีกว่า

    • มีโปรเจกต์ชื่อ Borgo แต่ยังไม่ค่อยสมบูรณ์
    • กำลังฝันถึง Go ที่มี sum type และ ไม่มี nil pointer ส่วน Gleam ก็ใกล้เคียงแนวทางนั้น แต่ไปคนละทางมากเกินไป