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)) + } +}