Robert Griesemer วิศวกรกูเกิลในทีมงานภาษา Go เขียนบล็อกสรุปถึงความพยายามที่จะสร้าง syntax ใหม่เพื่อจัดการความผิดพลาดหลังเรียก API ภายนอก เนื่องจากภาษา Go นั้นไม่รองรับ exception และความผิดพลาดต่างๆ จากการเรียกฟังก์ชั่นจะถูกรายงานออกมาออกในรูปแบบของการคืนค่าซึ่งโปรแกรมเมอร์ Go ก็มักใช้ตัวแปรชื่อ err มารับค่านี้ไว้ และตรวจสอบว่าเกิดความผิดพลาดหรือไม่
แต่รูปแบบการตรวจสอบความผิดพลาดนี้ทำให้โค้ดไม่สวยในหลายกรณี โดยเฉพาะเมื่อมีการเรียกฟังก์ชั่นจำนวนมากๆ ก็จะเกิด if ที่ใช้ตรวจความผิดพลาดเต็มไปหมด
Griesemer ระบุว่าทีมงานรับฟังความเห็นนี้ และหลายปีที่ผ่านมาก็พยายามหาทางแก้ปัญหาเริ่มตั้งแต่ปี 2018 เป็นต้นมา และข้อเสนอหลายอันก็สร้างข้อถกเถียงอย่างกว้างขวาง เช่น ข้อเสนอ try เมื่อปี 2019 มีคอมเมนต์เถียงกันกว่า 900 คอมเมนต์ หรือข้อเสนอ ? เมื่อปี 2024 ที่ยืม syntax มาจากภาษา Rust
หลังจากถกเถียงกันมาหลายปี Griesemer ระบุว่า syntax การจัดการความผิดพลาดของ Go ใช้งานได้ดี แม้จะทำให้โค้ดยาวไปบ้าง และการนำอิมพลีเมนต์ฟีเจอร์จัดการความผิดพลาดใหม่ก็สร้างความขัดแย้งในกลุ่มผู้ใช้ และฟีเจอร์การจัดการความผิดพลาดนี้ต่างจากฟีเจอร์อื่น เพราะถ้าใส่เข้ามาและมีคนเริ่มใช้ โปรแกรมเมอร์อื่นๆ ก็จะถูกบังคับให้ใช้งานไปพร้อมกัน ขณะที่ฟีเจอร์อื่น เช่น Generics คนที่ไม่สนใจใช้งานก็ยังทำงานได้ต่อไปโดยไม่ต้องใช้ฟีเจอร์นี้ นอกจากนี้ไลบรารีใหม่ๆ ก็ช่วยลดความยืดเยื้อของโค้ดลงได้บ้าง เช่น cmp.Or ก็ใช้จัดการความผิดพลาดได้ทีหลังหลายๆ API call
จากข้อสรุปทั้งหมด Griesemer ประกาศว่าทีมงาน Go ยังไม่รับข้อเสนอการจัดการความผิดพลาดอีกแล้ว และทีมงานจะปิดข้อเสนอทั้งหมด
ที่มา - Go Blog
on
เหมือนก็ก่อนผมก็นิยมใช้ try…
rattananen Thu, 05/06/2025 - 01:10
เหมือนก็ก่อนผมก็นิยมใช้ try อยู่
พอเวลาผ่านไปรู้สึก มันเป็น bad practice มากกว่า
มันทำให้ design ของระบบ โดยรวมแย่ลงถ้าเอาไปใช้ใน business logic (ขนาดระดับ senior ยังมีให้เห็น)
อาการเดียวกับใช้ goto แต่หนักกว่าเพราะ jump ข้าม function กันเลย
สุดท้าย return code เอา ดีสุดหรือเอาแค่ boolean ก็ยังดี
เอาจริงๆ ผมว่าหลายคนแยก…
mr_tawan Thu, 05/06/2025 - 03:03
In reply to เหมือนก็ก่อนผมก็นิยมใช้ try… by rattananen
เอาจริงๆ ผมว่าหลายคนแยก exception handling กับ error ไม่ออก
exception จริง ๆ เหมาะกับกรณีที่ไม่คาดคิด เช่นแรมหมด ดิสก์พัง ดาต้าเบสล่ม ฯลฯ แต่คนก็เอามาปนกับ error อย่างอื่น โดยเฉพาะ business error
ของ go ผมเฉย ๆ คือ มันมาจาก C ง่ะ ก็ทำแบบ C ไปสิ 555
มี Java ที่แยก checked…
nat3738 Thu, 05/06/2025 - 07:50
In reply to เอาจริงๆ ผมว่าหลายคนแยก… by mr_tawan
มี Java ที่แยก checked exception กับ unchecked exception แต่น่ารำคาญมากเลยไม่มีภาษาอื่นใช้ตาม
นึกว่าผมคิดว่ามันเป็น bad…
Hoo Thu, 05/06/2025 - 10:58
In reply to เหมือนก็ก่อนผมก็นิยมใช้ try… by rattananen
นึกว่าผมคิดว่ามันเป็น bad practice อยู่คนเดียวซะอีก
แต่เห็นใช้กันทั่วบ้านทั่วเมืองเลยไม่แน่ใจ
มีเพื่อนละ 😅
ดีแล้วนะ…
tomyum Thu, 05/06/2025 - 08:59
ดีแล้วนะ มันก็แค่โค้ดไม่สวยในบางกรณี โดนล้อเป็นมีมตลอดไป 55555
ฮ่าๆๆ ผมก็เห็นด้วยนะ…
btoy Thu, 05/06/2025 - 09:07
In reply to ดีแล้วนะ… by tomyum
ฮ่าๆๆ ผมก็เห็นด้วยนะ ใช้แบบนี้แหละดีแล้ว โดนล้อ ก็แค่ยิ้มรับ เพราะ it is what it is
This is the way.
paween_a Thu, 05/06/2025 - 10:57
In reply to ฮ่าๆๆ ผมก็เห็นด้วยนะ… by btoy
This is the way.