การดู : 0

12/04/2026 18:16น.

Ep.16  Go กับ Error Handling & Unit Testing - จัดการข้อผิดพลาดและทดสอบโค้ด

Ep.16  Go กับ Error Handling & Unit Testing - จัดการข้อผิดพลาดและทดสอบโค้ด

#Error Handling

#Unit Testing

#Table-Driven Tests

#การจัดการข้อผิดพลาด

#Golang

#Superdev School

#โปรแกรมเมอร์

#การศึกษาการเขียนโปรแกรม

#ภาษาโปรแกรมมิ่ง

#ภาษาโปรแกรม

#ฝึกเขียนโปรแกรม

#การเขียนโปรแกรม

 Go กับ Error Handling & Unit Testing - จัดการข้อผิดพลาดและทดสอบโค้ด! 

 

ข้อผิดพลาดเป็นส่วนหนึ่งของการเขียนโปรแกรมที่หลีกเลี่ยงไม่ได้ และใน Go เรามีวิธีจัดการอย่างเป็นระบบ เพื่อให้โค้ดทำงานได้ถูกต้องและเสถียร! 

 

Error Handling คืออะไร?

การจัดการข้อผิดพลาดใน Go เน้นการตรวจสอบและจัดการปัญหาที่อาจเกิดขึ้นระหว่างการทำงานของโปรแกรม เช่น การเชื่อมต่อฐานข้อมูลไม่สำเร็จ ไฟล์ที่หาไม่พบ หรือการคำนวณที่ผิดพลาด

ตัวอย่าง Error Handling ใน Go

ใน Go เรามักจะคืนค่า error ในฟังก์ชันเพื่อให้เช็คว่ามีข้อผิดพลาดเกิดขึ้นหรือไม่ในโค้ดนี้:

ฟังก์ชัน divide ตรวจสอบว่า b เป็น 0 หรือไม่ หากเป็น 0 จะส่งคืนข้อผิดพลาด

เราใช้ if err != nil เพื่อตรวจสอบข้อผิดพลาดก่อนที่จะใช้ผลลัพธ์

package main

import (
    "errors"
    "fmt"
)

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("cannot divide by zero")
    }
    return a / b, nil
}

func main() {
    result, err := divide(10, 0)
    if err != nil {
        fmt.Println("Error:", err)
        return
    }
    fmt.Println("Result:", result)
}

 

สร้าง Custom Error แบบง่ายๆ

นอกจากข้อผิดพลาดทั่วไป เรายังสามารถสร้างข้อผิดพลาดเฉพาะของเราเองได้

โดยใช้ ErrInvalidInput ทำให้เราแยกข้อผิดพลาดแต่ละแบบได้ชัดเจนขึ้น

var ErrInvalidInput = errors.New("invalid input provided")

func checkInput(input int) error {
    if input < 0 {
        return ErrInvalidInput
    }
    return nil
}

 

การทำ Unit Testing ใน Go

Unit Testing เป็นการทดสอบส่วนย่อยๆ ของโปรแกรมเพื่อให้แน่ใจว่าทำงานได้ถูกต้องตามที่คาดหวัง ใน Go เรามีแพ็กเกจ testing สำหรับเขียนเทสท์

ตัวอย่างการทดสอบฟังก์ชัน add ในโค้ดนี้:

TestAdd คือฟังก์ชันทดสอบที่ใช้ t *testing.T สำหรับการทดสอบ

t.Errorf ใช้แสดงข้อผิดพลาดหากผลลัพธ์ไม่ตรงกับที่คาดหวัง

package main

import "testing"

func add(a, b int) int {
    return a + b
}

func TestAdd(t *testing.T) {
    result := add(2, 3)
    if result != 5 {
        t.Errorf("Expected 5, got %d", result)
    }
}

 

Table-Driven Tests - การทดสอบหลายกรณีในครั้งเดียว

Table-Driven Tests คือเทคนิคที่ช่วยให้เราทดสอบหลายกรณีในฟังก์ชันเดียวได้อย่างมีประสิทธิภาพ

ในโค้ดนี้:

เราสร้าง Table ที่มีกรณีทดสอบต่างๆ แล้วใช้ for วนรันเทสท์ในแต่ละกรณี

func TestAddCases(t *testing.T) {
    cases := []struct {
        a, b, expected int
    }{
        {1, 2, 3},
        {2, 3, 5},
        {0, 0, 0},
    }

    for _, c := range cases {
        result := add(c.a, c.b)
        if result != c.expected {
            t.Errorf("Expected %d, got %d", c.expected, result)
        }
    }
}

 

การรัน Unit Tests ใน Go

ใช้คำสั่ง go test เพื่อรันการทดสอบ:

go test

 

สรุปง่ายๆ

  • ใช้ error ในฟังก์ชันเพื่อตรวจสอบข้อผิดพลาด
  • ใช้ testing สำหรับการทดสอบฟังก์ชัน
  • ใช้ Table-Driven Tests เพื่อทดสอบหลายกรณีในครั้งเดียว