Trung BìnhGolang iconGolang

Error handling trong Go khác gì JS/Python?

  • Go không có try/catch/throw.
  • Errors là values, check lỗi ngay sau khi gọi.
  • Explicit > implicit.
go
// Hàm trả (result, error)
func readFile(path string) ([]byte, error) {
    data, err := os.ReadFile(path)
    if err != nil {
        return nil, fmt.Errorf("readFile %s: %w", path, err)
    }
    return data, nil
}

// Xử lý lỗi tại nơi gọi
data, err := readFile("config.json")
if err != nil {
    log.Fatal(err)
}

// Custom error
var ErrNotFound = errors.New("not found")

// Wrap và unwrap error
err := fmt.Errorf("service layer: %w", ErrNotFound)
errors.Is(err, ErrNotFound) // true

errors.Is(), errors.As() để check error chain.

Xem toàn bộ Golang cùng filter theo level & chủ đề con.

Mở danh sách Golang