diff --git a/slice/slice_concurrent.go b/slice/slice_concurrent.go index 6216739..4b3746a 100644 --- a/slice/slice_concurrent.go +++ b/slice/slice_concurrent.go @@ -195,18 +195,14 @@ func UniqueByConcurrent[T comparable](slice []T, comparator func(item T, other T chunks = append(chunks, slice[i:end]) } - type resultChunk struct { - index int - data []T - } - resultCh := make(chan resultChunk, numThreads) + resultCh := make(chan resultChunk[T], numThreads) var wg sync.WaitGroup for i, chunk := range chunks { wg.Add(1) go func(index int, chunk []T) { defer wg.Done() - resultCh <- resultChunk{index, removeDuplicate(chunk, comparator)} + resultCh <- resultChunk[T]{index, removeDuplicate(chunk, comparator)} }(i, chunk) } diff --git a/slice/slice_internal.go b/slice/slice_internal.go index 95fde19..f6c275e 100644 --- a/slice/slice_internal.go +++ b/slice/slice_internal.go @@ -7,6 +7,13 @@ import ( "golang.org/x/exp/constraints" ) +// resultChunk is used to store the intermediate results of UniqueByConcurrent. +// It is defined separately to be compatible with versions of go up to 1.20. +type resultChunk[T comparable] struct { + index int + data []T +} + // sliceValue return the reflect value of a slice func sliceValue(slice any) reflect.Value { v := reflect.ValueOf(slice)