diff --git a/CHANGELOG.md b/CHANGELOG.md
index ae3cecd..29fe511 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,11 @@
# go-utils
+
+## [v1.48.0] - 2026-06-22
+### New Features
+- contains prefix
+
+
## [v1.47.0] - 2026-05-13
### New Features
@@ -354,11 +360,11 @@
- add money formatter for multiple currencies ([#13](https://github.com/kumparan/go-utils/issues/13))
-
-## [v1.8.0] - 2020-12-10
-
## [v1.7.1] - 2020-12-10
+
+
+## [v1.8.0] - 2020-12-10
### New Features
- add formatter for indonesian money and date
@@ -423,7 +429,8 @@
- init go-utils
-[Unreleased]: https://github.com/kumparan/go-utils/compare/v1.47.0...HEAD
+[Unreleased]: https://github.com/kumparan/go-utils/compare/v1.48.0...HEAD
+[v1.48.0]: https://github.com/kumparan/go-utils/compare/v1.47.0...v1.48.0
[v1.47.0]: https://github.com/kumparan/go-utils/compare/v1.46.0...v1.47.0
[v1.46.0]: https://github.com/kumparan/go-utils/compare/v1.45.0...v1.46.0
[v1.45.0]: https://github.com/kumparan/go-utils/compare/v1.44.1...v1.45.0
@@ -481,9 +488,9 @@
[v1.12.0]: https://github.com/kumparan/go-utils/compare/v1.11.0...v1.12.0
[v1.11.0]: https://github.com/kumparan/go-utils/compare/v1.10.0...v1.11.0
[v1.10.0]: https://github.com/kumparan/go-utils/compare/v1.9.0...v1.10.0
-[v1.9.0]: https://github.com/kumparan/go-utils/compare/v1.8.0...v1.9.0
-[v1.8.0]: https://github.com/kumparan/go-utils/compare/v1.7.1...v1.8.0
-[v1.7.1]: https://github.com/kumparan/go-utils/compare/v1.7.0...v1.7.1
+[v1.9.0]: https://github.com/kumparan/go-utils/compare/v1.7.1...v1.9.0
+[v1.7.1]: https://github.com/kumparan/go-utils/compare/v1.8.0...v1.7.1
+[v1.8.0]: https://github.com/kumparan/go-utils/compare/v1.7.0...v1.8.0
[v1.7.0]: https://github.com/kumparan/go-utils/compare/v1.6.0...v1.7.0
[v1.6.0]: https://github.com/kumparan/go-utils/compare/v1.5.0...v1.6.0
[v1.5.0]: https://github.com/kumparan/go-utils/compare/v1.4.0...v1.5.0
diff --git a/slice.go b/slice.go
index 2265f36..472dd58 100644
--- a/slice.go
+++ b/slice.go
@@ -2,6 +2,7 @@ package utils
import (
"strconv"
+ "strings"
)
// ContainsInt64 tells whether a slice contains x.
@@ -24,6 +25,16 @@ func ContainsString(a []string, x string) bool {
return false
}
+// ContainsPrefix tells whether a slice of string contains prefix of in, case-sensitive.
+func ContainsPrefix(prefixes []string, in string) bool {
+ for _, pref := range prefixes {
+ if strings.HasPrefix(in, pref) {
+ return true
+ }
+ }
+ return false
+}
+
// SliceAtoi -> convert array of string to array of integer
func SliceAtoi(s []string) ([]int, error) {
var arr []int
diff --git a/slice_test.go b/slice_test.go
index 83f9cd5..e0cc6e5 100644
--- a/slice_test.go
+++ b/slice_test.go
@@ -257,3 +257,48 @@ func Test_ReverseSlice(t *testing.T) {
assert.Equal(t, dest, ReverseSlice(source))
})
}
+
+func Test_ContainsPrefix(t *testing.T) {
+ type tc struct {
+ prefixes []string
+ input string
+ result bool
+ }
+
+ testCases := []tc{
+ {
+ prefixes: []string{"pre", "start", "begin"},
+ input: "prefix",
+ result: true,
+ },
+ {
+ prefixes: []string{"pre", "start", "begin"},
+ input: "startle",
+ result: true,
+ },
+ {
+ prefixes: []string{"pre", "start", "begin"},
+ input: "beginning",
+ result: true,
+ },
+ {
+ prefixes: []string{"pre", "start", "begin"},
+ input: "hello",
+ result: false,
+ },
+ {
+ prefixes: []string{"worldle", "start", "begin"},
+ input: "worldstartbegin",
+ result: false,
+ },
+ {
+ prefixes: []string{"Word", "wOrd", "WOrd"},
+ input: "word",
+ result: false,
+ },
+ }
+
+ for _, tc := range testCases {
+ assert.Equal(t, tc.result, ContainsPrefix(tc.prefixes, tc.input))
+ }
+}