- 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) // trueerrors.Is(), errors.As() để check error chain.