From 4965b0f13691de9f60deba4e3e0b4526f27aa76e Mon Sep 17 00:00:00 2001 From: Tobias Klauser Date: Wed, 21 Aug 2024 09:43:09 +0200 Subject: [PATCH] Deprecate strings/slices functions covered by stdlib slices As suggested by Tim in [1], deprecate the functions in the k8s.io/utils/strings/slices package that are already covered by generic functions in the Go standard library slices package. Also reimplement them in terms of slices functions. [1] https://github.com/kubernetes/kubernetes/pull/126715#pullrequestreview-2241525172 --- strings/slices/slices.go | 45 +++++++++------------------------------- 1 file changed, 10 insertions(+), 35 deletions(-) diff --git a/strings/slices/slices.go b/strings/slices/slices.go index 8e21838f..1636dfa7 100644 --- a/strings/slices/slices.go +++ b/strings/slices/slices.go @@ -20,21 +20,14 @@ limitations under the License. // replace "stringslices" if the "slices" package becomes standard. package slices +import goslices "slices" + // Equal reports whether two slices are equal: the same length and all // elements equal. If the lengths are different, Equal returns false. // Otherwise, the elements are compared in index order, and the // comparison stops at the first unequal pair. -func Equal(s1, s2 []string) bool { - if len(s1) != len(s2) { - return false - } - for i, n := range s1 { - if n != s2[i] { - return false - } - } - return true -} +// Deprecated: use [slices.Equal] instead. +var Equal = goslices.Equal[[]string, string] // Filter appends to d each element e of s for which keep(e) returns true. // It returns the modified d. d may be s[:0], in which case the kept @@ -51,32 +44,14 @@ func Filter(d, s []string, keep func(string) bool) []string { } // Contains reports whether v is present in s. -func Contains(s []string, v string) bool { - return Index(s, v) >= 0 -} +// Deprecated: use [slices.Contains] instead. +var Contains = goslices.Contains[[]string, string] // Index returns the index of the first occurrence of v in s, or -1 if // not present. -func Index(s []string, v string) int { - // "Contains" may be replaced with "Index(s, v) >= 0": - // https://github.com/golang/go/issues/45955#issuecomment-873377947 - for i, n := range s { - if n == v { - return i - } - } - return -1 -} - -// Functions below are not in https://github.com/golang/go/issues/45955 +// Deprecated: use [slices.Index] instead. +var Index = goslices.Index[[]string, string] // Clone returns a new clone of s. -func Clone(s []string) []string { - // https://github.com/go101/go101/wiki/There-is-not-a-perfect-way-to-clone-slices-in-Go - if s == nil { - return nil - } - c := make([]string, len(s)) - copy(c, s) - return c -} +// Deprecated: use [slices.Clone] instead. +var Clone = goslices.Clone[[]string, string]