วันนี้ทำการ review code ที่เขียนด้วยภาษา Go กับทีม
พบว่ามี pattern แปลก ๆ มาใน code ด้วย
อาจจะเรียกได้ว่าเป็น B.A.D code ก็ได้
ซึ่งขึ้ยอยู่กับ use case ด้วยเช่นกัน
เลยทำการสรุปไว้นิดหน่อย เพื่อใช้ในการปรับปรุงต่อไป

เรื่องแรก เจอเยอะมาก ๆ คือ การใช้งาน function init()

โดยที่ init() นั้นจะใช้สำหรับการ initial ต่าง ๆ ที่ต้องการใช้งาน
ใน package นั้น ๆ เนื่องจากจะถูกเรียกใช้งานแบบอัตโนมัติ
บ่อยครั้งพบว่า ใน init() นั้นจะมี logic ต่าง ๆ เยอะ
ส่งผลให้จากต่อการทำความเข้าใจ
เกิดความผูกมัดมากยิ่งขึ้น
ยิ่งถ้ามีการเรียกใช้ข้าม package ก็จะมีขั้นตอนการทำงานเพิ่มเข้ามา
เป็นรูปแบบการเขียน code ที่เพิ่มความซับซ้อนเข้ามา
และทำให้การทดสอบยากขึ้นอีกด้วย
ดังนั้น ถ้าต้องการใช้งานต้องคิดดี ๆ

เรื่องที่สอง เจอการใช้งาน Global variable เยอะมาก ๆ

เนื่องจาก global variable นั้น
ช่วยให้ง่ายต่อการ share ข้อมูล หรือ state ต่าง ๆ ของการทำงาน
แต่ถ้าจัดการไม่ดี อาจจะก่อให้เกิดปัญหามากขึ้นตามมา เช่น

  • เกิด race condition คือการอ่านและเขียนพร้อม ๆ กัน จากหลาย ๆ process เช่น การใช้งานจาก go routine ทำให้เกิดปัญหาที่ไม่คาดฝันขึ้นมาได้ ซึ่งหาปัญหายากมาก ๆ
  • ทดสอบยากขึ้น
  • การแยกในระดับ module และ package หรือการ reuse จะยากมาก ๆ

ดังนั้นสิ่งที่ดีคือ ควรแยกให้ชัด ๆ ของ module และ package
เพื่อจัดการ scope ได้อย่างถูกต้องและเหมาะสม

เรื่องที่สาม มักจะไม่ใช้งาน defer และ recovery

บ่อยครั้งมักจะเจอว่า ไม่ค่อยใช้ defer ในการคืน resource ที่ขอใช้งาน
เช่นการเปิดอ่านไฟล์ หรือ เชื่อมต่อ database เป็นต้น
อักอย่างคือ ใช้ defer แต่ไม่ได้ตรวจสอบว่า resource เหล่านั้นขอใช้งานได้หรือไม่ !!


รวมทั้งไม่ได้ใช้งาน recovery สำหรับจัดการ panic() ต่าง ๆ ที่เกิดขึ้น
ในขณะ runtime ส่งผลทำให้ระบบพังง่ายมาก ๆ
ซึ่งตรงนี้ต้องระมัดระวังอย่างมาก

เรื่องที่สี่ ชอบ ignore error ต่าง ๆ ที่ส่งกลับมาจาก function ต่าง ๆ

ปกติ function ต่าง ๆ มักจะ return error กลับมา
เพื่อบอกว่า ผลการทำงานของ function นั้น ๆ มี error หรือไม่
แต่บ่อยครั้งพบว่า จะ ignore ด้วย _ ในการรับ error นั้น ๆ
ซึ่งอาจจะทำให้ระบบทำงานผิดพลาดก็ได้
ดังนั้นควรระวังให้มาก ๆ

เรื่องที่ห้า จะเจอเกือบทุกภาษาคือ nest if หรือ if ซ้อน if ซ้อน if

ตรงนี้ลดละเลิกเถอะนะ เพราะว่า อ่าน และ แก้ไขยากมาก ๆ

มีอีกอย่างคือ ใน switch case ชอบไม่ใช้ default case อีก
ตรงนี้อาจจะทำให้เกิดปัญหาที่ไม่คาดหวังเกิดขึ้นได้
ดังนั้น จำเป้นต้องเขียน code ให้ปลอดภัยกันด้วยนะ

เพิ่มอีกหน่อย คือ ไม่ยอมเขียน comment อีก
มีบางระบบจำเป็นต้องสร้าง document ขึ้นมาจาก code
เพื่อช่วยให้ทีมเข้าใจ code มากยิ่งขึ้น ว่าทำงานอะไร อย่างไร

ขอให้สนุกกับการ coding ครับ