From ba4b058b7ab60105e03f83380cc3200a8a66e52f Mon Sep 17 00:00:00 2001 From: hardlydearly <799511800@qq.com> Date: Wed, 30 Apr 2025 10:43:26 +0800 Subject: [PATCH] refactor: use slices.Contains to simplify code Signed-off-by: hardlydearly <799511800@qq.com> --- cmd/prometheus/main.go | 7 +++---- config/config.go | 9 ++++----- discovery/kubernetes/kubernetes.go | 12 ++---------- model/labels/labels_common.go | 6 ++---- model/labels/regexp.go | 22 ++++++---------------- rules/manager_test.go | 8 +++----- tsdb/index/postings.go | 6 ++---- 7 files changed, 22 insertions(+), 48 deletions(-) diff --git a/cmd/prometheus/main.go b/cmd/prometheus/main.go index 0e547deaf9..52c5194a91 100644 --- a/cmd/prometheus/main.go +++ b/cmd/prometheus/main.go @@ -30,6 +30,7 @@ import ( goregexp "regexp" //nolint:depguard // The Prometheus client library requires us to pass a regexp from this package. "runtime" "runtime/debug" + "slices" "strconv" "strings" "sync" @@ -1921,10 +1922,8 @@ func (p *rwProtoMsgFlagParser) Set(opt string) error { if err := t.Validate(); err != nil { return err } - for _, prev := range *p.msgs { - if prev == t { - return fmt.Errorf("duplicated %v flag value, got %v already", t, *p.msgs) - } + if slices.Contains(*p.msgs, t) { + return fmt.Errorf("duplicated %v flag value, got %v already", t, *p.msgs) } *p.msgs = append(*p.msgs, t) return nil diff --git a/config/config.go b/config/config.go index 5fbcbd8307..63464afe03 100644 --- a/config/config.go +++ b/config/config.go @@ -21,6 +21,7 @@ import ( "net/url" "os" "path/filepath" + "slices" "sort" "strconv" "strings" @@ -1109,13 +1110,11 @@ func (v *AlertmanagerAPIVersion) UnmarshalYAML(unmarshal func(interface{}) error return err } - for _, supportedVersion := range SupportedAlertmanagerAPIVersions { - if *v == supportedVersion { - return nil - } + if !slices.Contains(SupportedAlertmanagerAPIVersions, *v) { + return fmt.Errorf("expected Alertmanager api version to be one of %v but got %v", SupportedAlertmanagerAPIVersions, *v) } - return fmt.Errorf("expected Alertmanager api version to be one of %v but got %v", SupportedAlertmanagerAPIVersions, *v) + return nil } const ( diff --git a/discovery/kubernetes/kubernetes.go b/discovery/kubernetes/kubernetes.go index 03d9f2f449..2c4829ca8d 100644 --- a/discovery/kubernetes/kubernetes.go +++ b/discovery/kubernetes/kubernetes.go @@ -20,6 +20,7 @@ import ( "log/slog" "os" "reflect" + "slices" "strings" "sync" "time" @@ -210,18 +211,9 @@ func (c *SDConfig) UnmarshalYAML(unmarshal func(interface{}) error) error { if _, ok := allowedSelectors[c.Role]; !ok { return fmt.Errorf("invalid role: %q, expecting one of: pod, service, endpoints, endpointslice, node or ingress", c.Role) } - var allowed bool - for _, role := range allowedSelectors[c.Role] { - if role == string(selector.Role) { - allowed = true - break - } - } - - if !allowed { + if !slices.Contains(allowedSelectors[c.Role], string(selector.Role)) { return fmt.Errorf("%s role supports only %s selectors", c.Role, strings.Join(allowedSelectors[c.Role], ", ")) } - _, err := fields.ParseSelector(selector.Field) if err != nil { return err diff --git a/model/labels/labels_common.go b/model/labels/labels_common.go index 005eaa509e..092783fbbd 100644 --- a/model/labels/labels_common.go +++ b/model/labels/labels_common.go @@ -167,10 +167,8 @@ func (b *Builder) Del(ns ...string) *Builder { // Keep removes all labels from the base except those with the given names. func (b *Builder) Keep(ns ...string) *Builder { b.base.Range(func(l Label) { - for _, n := range ns { - if l.Name == n { - return - } + if slices.Contains(ns, l.Name) { + return } b.del = append(b.del, l.Name) }) diff --git a/model/labels/regexp.go b/model/labels/regexp.go index cf6c9158e9..1636aacc21 100644 --- a/model/labels/regexp.go +++ b/model/labels/regexp.go @@ -95,12 +95,7 @@ func (m *FastRegexMatcher) compileMatchStringFunction() func(string) bool { return func(s string) bool { if len(m.setMatches) != 0 { - for _, match := range m.setMatches { - if match == s { - return true - } - } - return false + return slices.Contains(m.setMatches, s) } if m.prefix != "" && !strings.HasPrefix(s, m.prefix) { return false @@ -771,16 +766,11 @@ func (m *equalMultiStringSliceMatcher) setMatches() []string { func (m *equalMultiStringSliceMatcher) Matches(s string) bool { if m.caseSensitive { - for _, v := range m.values { - if s == v { - return true - } - } - } else { - for _, v := range m.values { - if strings.EqualFold(s, v) { - return true - } + return slices.Contains(m.values, s) + } + for _, v := range m.values { + if strings.EqualFold(s, v) { + return true } } return false diff --git a/rules/manager_test.go b/rules/manager_test.go index efd7a8b23c..54ca8ebfb3 100644 --- a/rules/manager_test.go +++ b/rules/manager_test.go @@ -20,6 +20,7 @@ import ( "math" "os" "path" + "slices" "sort" "strconv" "sync" @@ -1008,11 +1009,8 @@ func TestMetricsUpdate(t *testing.T) { var metrics int for _, m := range ms { s := m.GetName() - for _, n := range metricNames { - if s == n { - metrics += len(m.Metric) - break - } + if slices.Contains(metricNames, s) { + metrics += len(m.Metric) } } return metrics diff --git a/tsdb/index/postings.go b/tsdb/index/postings.go index 7fdf64acca..75e3c2c148 100644 --- a/tsdb/index/postings.go +++ b/tsdb/index/postings.go @@ -599,10 +599,8 @@ func Intersect(its ...Postings) Postings { if len(its) == 1 { return its[0] } - for _, p := range its { - if p == EmptyPostings() { - return EmptyPostings() - } + if slices.Contains(its, EmptyPostings()) { + return EmptyPostings() } return newIntersectPostings(its...)