12/04/2026 18:16น.

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 เพื่อทดสอบหลายกรณีในครั้งเดียว