Skip to content

Commit ce581fb

Browse files
committed
refactor: modernize error handling with Go 1.26 errors.AsType
Replace errors.As with errors.AsType[T] for cleaner, type-safe error handling. This leverages Go 1.26's generic error extraction API for improved code clarity.
1 parent 91779bc commit ce581fb

5 files changed

Lines changed: 9 additions & 10 deletions

File tree

errors.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,6 @@ func NewErrRateLimit(retryAfter time.Duration) *ErrRateLimit {
138138

139139
// IsErrRateLimit checks if the provided error is or wraps an ErrRateLimit error.
140140
func IsErrRateLimit(err error) bool {
141-
var rateLimitErr *ErrRateLimit
142-
return errors.As(err, &rateLimitErr)
141+
_, ok := errors.AsType[*ErrRateLimit](err)
142+
return ok
143143
}

tests/default_logger_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func TestDefaultLoggerFatalExitsWithCode1(t *testing.T) {
3737
// The subprocess should have exited with code 1.
3838
require.Error(t, err, "expected Fatal to cause a non-zero exit")
3939

40-
var exitErr *exec.ExitError
41-
require.True(t, errors.As(err, &exitErr), "expected *exec.ExitError")
40+
exitErr, ok := errors.AsType[*exec.ExitError](err)
41+
require.True(t, ok, "expected *exec.ExitError")
4242
assert.Equal(t, 1, exitErr.ExitCode(), "expected exit code 1")
4343
}

tests/handler_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,6 @@ func TestHandlerProcessWithRateLimiter(t *testing.T) {
8484

8585
// The second call should be limited
8686
err = handler.Process(context.Background(), job)
87-
var rateLimitError *queue.ErrRateLimit
88-
assert.True(t, errors.As(err, &rateLimitError), "Process() should return ErrRateLimit error")
87+
_, ok := errors.AsType[*queue.ErrRateLimit](err)
88+
assert.True(t, ok, "Process() should return ErrRateLimit error")
8989
}

tests/ratelimit_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,8 +200,8 @@ func TestDualRateLimiterHandlerBlocksSecond(t *testing.T) {
200200

201201
// Second call should be rate-limited by the handler limiter.
202202
err = handler.Process(context.Background(), job)
203-
var rateLimitErr *queue.ErrRateLimit
204-
require.True(t, errors.As(err, &rateLimitErr),
203+
rateLimitErr, ok := errors.AsType[*queue.ErrRateLimit](err)
204+
require.True(t, ok,
205205
"second call should return ErrRateLimit from handler limiter")
206206
assert.Equal(t, queue.DefaultRateLimitRetryAfter, rateLimitErr.RetryAfter,
207207
"RetryAfter should match DefaultRateLimitRetryAfter")

worker.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,8 +267,7 @@ func (w *Worker) makeHandlerFunc(handler *Handler) func(ctx context.Context, tas
267267

268268
// retryDelayFunc determines the delay before retrying a task after failure, using custom logic or falling back to Asynq's default.
269269
func (w *Worker) retryDelayFunc(count int, err error, task *asynq.Task) time.Duration {
270-
var rateLimitErr *ErrRateLimit
271-
if errors.As(err, &rateLimitErr) {
270+
if rateLimitErr, ok := errors.AsType[*ErrRateLimit](err); ok {
272271
return rateLimitErr.RetryAfter
273272
}
274273

0 commit comments

Comments
 (0)