diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2fd586c..d231b46 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,9 +1,21 @@
# go-utils
+
+## [v1.41.0] - 2025-09-11
+### New Features
+- reverse slice
+
+
+
+## [v1.40.2] - 2025-06-10
+### Fixes
+- handle space on node link ([#70](https://github.com/kumparan/go-utils/issues/70))
+
+
## [v1.40.1] - 2025-04-24
### Fixes
-- force jpeg on push notif image for better compression
+- force jpeg on push notif image for better compression ([#69](https://github.com/kumparan/go-utils/issues/69))
@@ -363,7 +375,9 @@
- init go-utils
-[Unreleased]: https://github.com/kumparan/go-utils/compare/v1.40.1...HEAD
+[Unreleased]: https://github.com/kumparan/go-utils/compare/v1.41.0...HEAD
+[v1.41.0]: https://github.com/kumparan/go-utils/compare/v1.40.2...v1.41.0
+[v1.40.2]: https://github.com/kumparan/go-utils/compare/v1.40.1...v1.40.2
[v1.40.1]: https://github.com/kumparan/go-utils/compare/v1.40.0...v1.40.1
[v1.40.0]: https://github.com/kumparan/go-utils/compare/v1.39.6...v1.40.0
[v1.39.6]: https://github.com/kumparan/go-utils/compare/v1.39.5...v1.39.6
diff --git a/slice.go b/slice.go
index edf99e9..b44e9c4 100644
--- a/slice.go
+++ b/slice.go
@@ -206,3 +206,12 @@ func ConvertSlice[T1 any, T2 any](in []T1, converter func(T1) T2) []T2 {
}
return res
}
+
+// ReverseSlice :nodoc:
+func ReverseSlice[T any](in []T) []T {
+ reversed := make([]T, 0)
+ for i := len(in) - 1; i >= 0; i-- {
+ reversed = append(reversed, in[i])
+ }
+ return reversed
+}
diff --git a/slice_test.go b/slice_test.go
index 653c6c5..7a1ed15 100644
--- a/slice_test.go
+++ b/slice_test.go
@@ -235,3 +235,17 @@ func Test_ConvertSliceType(t *testing.T) {
assert.Equal(t, dstSlice, ConvertSlice(srcSlice, strings.TrimSpace))
})
}
+
+func Test_ReverseSlice(t *testing.T) {
+ t.Run("success", func(t *testing.T) {
+ source := []int{1, 2, 3, 4, 5}
+ dest := []int{5, 4, 3, 2, 1}
+ assert.Equal(t, dest, ReverseSlice(source))
+ })
+
+ t.Run("empty slice", func(t *testing.T) {
+ source := []int{}
+ dest := []int{}
+ assert.Equal(t, dest, ReverseSlice(source))
+ })
+}