Error Handling ใน Go มีแนวทางที่แตกต่างจากภาษาอื่น Go ไม่มี try/catch แต่ใช้ explicit error return ทำให้ Code ชัดเจน บทความนี้สอนทุก Pattern ตั้งแต่พื้นฐานจนถึง Custom Error Types
Error ใน Go พื้นฐาน
// Go Error คือ Interface ที่มี Method Error() string
// ทุก Function ที่อาจผิดพลาดจะ Return error เป็น value สุดท้าย
// ตรวจสอบด้วย if err != nil
//
// Sentinel Errors: var ErrNotFound = errors.New("not found")
// ตรวจสอบด้วย errors.Is(err, ErrNotFound)
//
// Error Wrapping (Go 1.13+):
// return fmt.Errorf("reading config: %w", err)
// Unwrap ด้วย errors.Is() และ errors.As()
//
// Custom Error Types:
// สร้าง struct ที่ implement Error() string
// ใช้ errors.As() สำหรับ Type Assertion
Best Practices
| Practice | คำอธิบาย |
|---|---|
| Handle errors immediately | ตรวจ err != nil ทันที |
| Wrap with context | ใช้ fmt.Errorf + %w |
| Use errors.Is/As | ไม่ใช้ == เปรียบเทียบ |
| Return early | Handle error แล้ว return ทันที |
สรุป
Go Error Handling ใช้ error return แทน exception ใช้ Sentinel Errors สำหรับค่าคงที่ Wrap Error ด้วย %w ใช้ Custom Error Types สำหรับข้อมูลเพิ่มเติม และตรวจสอบด้วย errors.Is/errors.As เสมอ
