diff --git a/datastructure/queue/arrayqueue.go b/datastructure/queue/arrayqueue.go index d15e933..4532894 100644 --- a/datastructure/queue/arrayqueue.go +++ b/datastructure/queue/arrayqueue.go @@ -60,7 +60,7 @@ func (q *ArrayQueue[T]) Front() T { // Back return back value of queue func (q *ArrayQueue[T]) Back() T { - return q.data[q.size-1] + return q.data[q.tail-1] } // EnQueue put element into queue diff --git a/retry/retry.go b/retry/retry.go index a30e6a1..c5533c1 100644 --- a/retry/retry.go +++ b/retry/retry.go @@ -128,9 +128,10 @@ func Retry(retryFunc RetryFunc, opts ...Option) error { } var i uint + var lastErr error for i < config.retryTimes { - err := retryFunc() - if err == nil { + lastErr = retryFunc() + if lastErr == nil { return nil } @@ -148,7 +149,7 @@ func Retry(retryFunc RetryFunc, opts ...Option) error { lastSlash := strings.LastIndex(funcPath, "/") funcName := funcPath[lastSlash+1:] - return fmt.Errorf("function %s run failed after %d times retry", funcName, i) + return fmt.Errorf("function %s run failed after %d times retry, last error: %w", funcName, i, lastErr) } // BackoffStrategy is an interface that defines a method for calculating backoff intervals. diff --git a/retry/retry_example_test.go b/retry/retry_example_test.go index 3c9cbeb..20cfcda 100644 --- a/retry/retry_example_test.go +++ b/retry/retry_example_test.go @@ -118,7 +118,7 @@ func ExampleRetryTimes() { } // Output: - // function retry.ExampleRetryTimes.func1 run failed after 2 times retry + // function retry.ExampleRetryTimes.func1 run failed after 2 times retry, last error: error occurs } func ExampleRetry() { diff --git a/retry/retry_test.go b/retry/retry_test.go index 125c2bc..ac2aac7 100644 --- a/retry/retry_test.go +++ b/retry/retry_test.go @@ -15,14 +15,16 @@ func TestRetryFailed(t *testing.T) { assert := internal.NewAssert(t, "TestRetryFailed") var number int + customError := errors.New("error occurs") increaseNumber := func() error { number++ - return errors.New("error occurs") + return customError } err := Retry(increaseNumber, RetryWithLinearBackoff(time.Microsecond*50)) assert.IsNotNil(err) + assert.Equal(errors.Is(err, customError), true) assert.Equal(DefaultRetryTimes, number) }