From c176ba378e8807033e58ccc47839f7614df36866 Mon Sep 17 00:00:00 2001 From: Grigoris Thanasoulas Date: Fri, 20 Jun 2025 17:05:14 +0200 Subject: [PATCH 1/2] arrayqueue: Fix bug in Back() method (#313) --- datastructure/queue/arrayqueue.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 From a97d27c32ee650552d2d0962ae7fa3cab9dfa72a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=AE=8B=E5=BF=B5?= Date: Mon, 23 Jun 2025 11:04:54 +0800 Subject: [PATCH 2/2] perf(retry): the error returned by the Retry function contains the last error (#315) --- retry/retry.go | 7 ++++--- retry/retry_example_test.go | 2 +- retry/retry_test.go | 4 +++- 3 files changed, 8 insertions(+), 5 deletions(-) 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) }