diff --git a/README.md b/README.md index 239eedc..bf6d5df 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@
![Go version](https://img.shields.io/badge/go-%3E%3Dv1.18-9cf) -[![Release](https://img.shields.io/badge/release-2.3.6-green.svg)](https://github.com/duke-git/lancet/releases) +[![Release](https://img.shields.io/badge/release-2.3.7-green.svg)](https://github.com/duke-git/lancet/releases) [![GoDoc](https://godoc.org/github.com/duke-git/lancet/v2?status.svg)](https://pkg.go.dev/github.com/duke-git/lancet/v2) [![Go Report Card](https://goreportcard.com/badge/github.com/duke-git/lancet/v2)](https://goreportcard.com/report/github.com/duke-git/lancet/v2) [![test](https://github.com/duke-git/lancet/actions/workflows/codecov.yml/badge.svg?branch=main&event=push)](https://github.com/duke-git/lancet/actions/workflows/codecov.yml) diff --git a/README_zh-CN.md b/README_zh-CN.md index 7a60211..2c7bb84 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -4,7 +4,7 @@
![Go version](https://img.shields.io/badge/go-%3E%3Dv1.18-9cf) -[![Release](https://img.shields.io/badge/release-2.3.6-green.svg)](https://github.com/duke-git/lancet/releases) +[![Release](https://img.shields.io/badge/release-2.3.7-green.svg)](https://github.com/duke-git/lancet/releases) [![GoDoc](https://godoc.org/github.com/duke-git/lancet/v2?status.svg)](https://pkg.go.dev/github.com/duke-git/lancet/v2) [![Go Report Card](https://goreportcard.com/badge/github.com/duke-git/lancet/v2)](https://goreportcard.com/report/github.com/duke-git/lancet/v2) [![test](https://github.com/duke-git/lancet/actions/workflows/codecov.yml/badge.svg?branch=main&event=push)](https://github.com/duke-git/lancet/actions/workflows/codecov.yml) 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/netutil/net.go b/netutil/net.go index 23af993..1b3b2fe 100644 --- a/netutil/net.go +++ b/netutil/net.go @@ -365,7 +365,7 @@ func validateScheme(scheme string) error { return nil } -var hostRegex = regexp.MustCompile(`^([a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])(\.[a-zA-Z0-9]|[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9])*$`) +var hostRegex = regexp.MustCompile(`^([a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]?)(\.[a-zA-Z0-9][a-zA-Z0-9\-]*[a-zA-Z0-9]?)+$`) var pathRegex = regexp.MustCompile(`^\/([a-zA-Z0-9%_-]+(?:\/[a-zA-Z0-9%_-]+)*)$`) var alphaNumericRegex = regexp.MustCompile(`^[a-zA-Z0-9]+$`) diff --git a/netutil/net_test.go b/netutil/net_test.go index 9b89e85..a080a48 100644 --- a/netutil/net_test.go +++ b/netutil/net_test.go @@ -196,6 +196,14 @@ func TestBuildUrl(t *testing.T) { want: "https://www.test.com/path%20with%20spaces", wantErr: false, }, + { + scheme: "https", + host: "my.api.edu.cn", + path: "/api", + query: nil, + want: "https://my.api.edu.cn/api", + wantErr: false, + }, } for _, tt := range tests { 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) }