Menu
CoddyTech

Xử lý lỗi cơ bản

Thuộc phần Kiến thức nền tảng trong hành trình GO của Coddy. Bài học 108 trên 109.

Xử lý lỗi cơ bản là một mẫu hình nền tảng trong Go, trong đó bạn kiểm tra lỗi sau các thao tác có thể thất bại.

Hãy cùng học cách xử lý lỗi trong Go bằng cách tạo một hàm chia đơn giản, trả về lỗi khi chia cho 0:

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

Hàm này trả về hai giá trị: kết quả phép chia và một lỗi. Nếu số chia bằng 0, hàm trả về thông báo lỗi thay vì thực hiện phép chia.

Bây giờ, hãy xem cách sử dụng hàm này và xử lý mọi lỗi có thể xảy ra:

result, err := divide(10, 0)
    
if err != nil {
    fmt.Println("Error occurred:", err)
    return // Dừng chạy hoặc xử lý lỗi
}
    
fmt.Println("Result:", result)

Sau khi chạy đoạn code này, chúng ta kiểm tra xem có xảy ra lỗi hay không bằng điều kiện if err != nil. Vì chúng ta đã thử chia cho 0, hàm trả về lỗi và nội dung sau sẽ hiển thị trên màn hình:

Error occurred: division by zero

Trong Go, cách trả về lỗi làm giá trị trả về cuối cùng rồi kiểm tra ngay rất phổ biến. Cách này giúp chương trình xử lý lỗi một cách an toàn thay vì bị sập.

challenge icon

Thử thách

Dễ

Trong thử thách này, bạn sẽ luyện tập cách xử lý lỗi cơ bản trong Go. Bạn có một hàm (function) chia hai số, nhưng phép chia cho 0 gây ra lỗi khi chạy. Nhiệm vụ của bạn là thêm phần xử lý lỗi để ngăn chương trình bị dừng đột ngột.

Đoạn code đã có một hàm trả về cả kết quả và lỗi. Bạn cần kiểm tra xem có lỗi hay không trước khi sử dụng kết quả.

Tự làm thử

package main

import (
	"errors"
	"fmt"
)

// Hàm (function) này chia x cho y và trả về lỗi nếu y bằng 0
func divide(x, y float64) (float64, error) {
	if y == 0 {
		return 0, errors.New("cannot divide by zero")
	}
	return x / y, nil
}

func main() {
	// Các giá trị kiểm tra
	numerator := 10.0
	denominator := 0.0
	
	// Gọi hàm divide
	result, err := divide(numerator, denominator)
	
	// TODO: Kiểm tra xem err có khác nil không (tức là có lỗi)
	// Nếu có lỗi, in lỗi ra bằng fmt.Println(err)
	// Nếu không, in kết quả bằng fmt.Printf("Result: %.2f\n", result)
	
	// Xóa dòng này và xử lý lỗi đúng cách ở phía trên
	fmt.Printf("Result: %.2f\n", result)
}
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch Go online