diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 37d55de..eebea87 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -23,7 +23,7 @@ jobs: - name: setup uses: actions/setup-go@v4 with: - go-version: '>=1.23.2' + go-version: '>=1.23.6' cache: false check-latest: true @@ -63,6 +63,6 @@ jobs: - id: govulncheck uses: golang/govulncheck-action@v1 with: - go-version-input: 1.23.2 + go-version-input: 1.23.6 go-package: ./... cache: false diff --git a/concurrent.go b/concurrent.go index eeaf33d..c6351ac 100644 --- a/concurrent.go +++ b/concurrent.go @@ -3,7 +3,6 @@ package concurrent import ( "sync" - "github.com/gregwebs/errors" "github.com/gregwebs/go-recovery" ) @@ -63,7 +62,7 @@ func (gr GoRoutine) GoN(n int, fn func(int) error) []error { }) } wg.Wait() - return errors.Joins(errs...) + return joins(errs...) } // The same as [GoEach] but with go routine launching configured by a GoRoutine. @@ -168,3 +167,22 @@ func NewUnboundedChan[T any]() UnboundedChan[T] { }() return uc } + +func joins(errs ...error) []error { + n := 0 + for _, err := range errs { + if err != nil { + n++ + } + } + if n == 0 { + return nil + } + newErrs := make([]error, 0, n) + for _, err := range errs { + if err != nil { + newErrs = append(newErrs, err) + } + } + return newErrs +} diff --git a/go.mod b/go.mod index 3b744ae..16c7068 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/gregwebs/go-concurrent -require github.com/gregwebs/go-recovery v0.3.2 +require github.com/gregwebs/go-recovery v0.4.0 + +require github.com/shoenig/test v1.11.0 require ( - github.com/gregwebs/errors v1.14.0 - github.com/shoenig/test v1.11.0 + github.com/google/go-cmp v0.6.0 // indirect + github.com/gregwebs/stackfmt v0.1.1 // indirect ) -require github.com/google/go-cmp v0.6.0 // indirect - -go 1.23.1 +go 1.23.6 diff --git a/go.sum b/go.sum index 31214b8..1d0bd9d 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,10 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/gregwebs/errors v1.14.0 h1:bkCLXmqiH+nNXUZi4+CNmDEUq04y9HQg0kNOtNPMS8E= -github.com/gregwebs/errors v1.14.0/go.mod h1:1NkCObP7+scylHlC69lwHl2ACOHwktWYrZV4EJDEl6g= -github.com/gregwebs/go-recovery v0.3.2 h1:vGjQtFXS5lRhDlMlMWCpbm4kQSu2FnZ6ozmxCtCGbJE= -github.com/gregwebs/go-recovery v0.3.2/go.mod h1:q1/QQy0LZN6bIBT90Bc07Xo2ndJEoTc0k8e0l6BN/xY= +github.com/gregwebs/go-recovery v0.4.0 h1:aZPu9Ovka7qHwK+xt/bZOtpaGwRW0ra8dyqiuuyJ0j4= +github.com/gregwebs/go-recovery v0.4.0/go.mod h1:pTiOtRRsvlROffEmTrlpnL6shXjNZflqGibKHpJIW9E= +github.com/gregwebs/stackfmt v0.1.1 h1:bqHZv69OGARsyNPD4tJfkJnu5oWjA86dISQKKfFt98A= +github.com/gregwebs/stackfmt v0.1.1/go.mod h1:MQWvus3s9juULflTEiFIllieKiz7AnX7i4HWyPOs2nQ= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/shoenig/test v1.11.0 h1:NoPa5GIoBwuqzIviCrnUJa+t5Xb4xi5Z+zODJnIDsEQ= diff --git a/group.go b/group.go index 76ce94f..39880ce 100644 --- a/group.go +++ b/group.go @@ -38,10 +38,10 @@ package concurrent import ( "context" + "errors" "fmt" "sync" - "github.com/gregwebs/errors" "github.com/gregwebs/go-recovery" ) @@ -92,7 +92,7 @@ func (g *Group) Wait() []error { if g.cancel != nil { g.cancel(errors.Join(errs...)) } - return errors.Joins(errs...) + return joins(errs...) } // NewGroupContext constructs a [Group] similar to [x/sync/errgroup] but with aenhancements.