From 8fb1fcf6844d80ce9a7ac46ae943be7cf04bf884 Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 13 Mar 2025 08:57:35 +0300
Subject: [PATCH 1/6] [#1671] Replace `interface{}` with `any`

gopatch:
```
@@
@@
-interface{}
+any
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 pkg/local_object_storage/engine/evacuate_test.go | 8 ++++----
 pkg/morph/client/client.go                       | 2 +-
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/pkg/local_object_storage/engine/evacuate_test.go b/pkg/local_object_storage/engine/evacuate_test.go
index 45c4b696b..18d433c6e 100644
--- a/pkg/local_object_storage/engine/evacuate_test.go
+++ b/pkg/local_object_storage/engine/evacuate_test.go
@@ -405,8 +405,8 @@ func TestEvacuateSingleProcess(t *testing.T) {
 	require.NoError(t, e.shards[ids[0].String()].SetMode(context.Background(), mode.ReadOnly))
 	require.NoError(t, e.shards[ids[1].String()].SetMode(context.Background(), mode.ReadOnly))
 
-	blocker := make(chan interface{})
-	running := make(chan interface{})
+	blocker := make(chan any)
+	running := make(chan any)
 
 	var prm EvacuateShardPrm
 	prm.ShardID = ids[1:2]
@@ -447,8 +447,8 @@ func TestEvacuateObjectsAsync(t *testing.T) {
 	require.NoError(t, e.shards[ids[0].String()].SetMode(context.Background(), mode.ReadOnly))
 	require.NoError(t, e.shards[ids[1].String()].SetMode(context.Background(), mode.ReadOnly))
 
-	blocker := make(chan interface{})
-	running := make(chan interface{})
+	blocker := make(chan any)
+	running := make(chan any)
 
 	var prm EvacuateShardPrm
 	prm.ShardID = ids[1:2]
diff --git a/pkg/morph/client/client.go b/pkg/morph/client/client.go
index 10ded5142..19349ccd5 100644
--- a/pkg/morph/client/client.go
+++ b/pkg/morph/client/client.go
@@ -213,7 +213,7 @@ func (c *Client) Invoke(ctx context.Context, contract util.Uint160, fee fixedn.F
 // If the remote neo-go node does not support sessions, `unwrap.ErrNoSessionID` is returned.
 // batchSize is the number of items to prefetch: if the number of items in the iterator is less than batchSize, no session will be created.
 // The default batchSize is 100, the default limit from neo-go.
-func (c *Client) TestInvokeIterator(cb func(stackitem.Item) error, batchSize int, contract util.Uint160, method string, args ...interface{}) error {
+func (c *Client) TestInvokeIterator(cb func(stackitem.Item) error, batchSize int, contract util.Uint160, method string, args ...any) error {
 	start := time.Now()
 	success := false
 	defer func() {
-- 
2.45.3


From ccc285201276928ed2750da62294c3ca2c0bb836 Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 13 Mar 2025 09:01:42 +0300
Subject: [PATCH 2/6] [#1671] Use max builtin where possible

gopatcH:
```
@@
var d, a expression
@@
-if d < a {
-    d = a
-}
-return d
+return max(d, a)

@@
var d, a expression
@@
-if d <= a {
-    d = a
-}
-return d
+return max(d, a)
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 .../config/engine/shard/boltdb/boltdb.go          | 15 +++------------
 .../config/engine/shard/pilorama/config.go        | 10 ++--------
 2 files changed, 5 insertions(+), 20 deletions(-)

diff --git a/cmd/frostfs-node/config/engine/shard/boltdb/boltdb.go b/cmd/frostfs-node/config/engine/shard/boltdb/boltdb.go
index a51308b5b..b564d36f8 100644
--- a/cmd/frostfs-node/config/engine/shard/boltdb/boltdb.go
+++ b/cmd/frostfs-node/config/engine/shard/boltdb/boltdb.go
@@ -37,10 +37,7 @@ func (x *Config) Perm() fs.FileMode {
 // Returns 0 if the value is not a positive number.
 func (x *Config) MaxBatchDelay() time.Duration {
 	d := config.DurationSafe((*config.Config)(x), "max_batch_delay")
-	if d < 0 {
-		d = 0
-	}
-	return d
+	return max(d, 0)
 }
 
 // MaxBatchSize returns the value of "max_batch_size" config parameter.
@@ -48,10 +45,7 @@ func (x *Config) MaxBatchDelay() time.Duration {
 // Returns 0 if the value is not a positive number.
 func (x *Config) MaxBatchSize() int {
 	s := int(config.IntSafe((*config.Config)(x), "max_batch_size"))
-	if s < 0 {
-		s = 0
-	}
-	return s
+	return max(s, 0)
 }
 
 // NoSync returns the value of "no_sync" config parameter.
@@ -66,8 +60,5 @@ func (x *Config) NoSync() bool {
 // Returns 0 if the value is not a positive number.
 func (x *Config) PageSize() int {
 	s := int(config.SizeInBytesSafe((*config.Config)(x), "page_size"))
-	if s < 0 {
-		s = 0
-	}
-	return s
+	return max(s, 0)
 }
diff --git a/cmd/frostfs-node/config/engine/shard/pilorama/config.go b/cmd/frostfs-node/config/engine/shard/pilorama/config.go
index 28671ca55..5d4e8f408 100644
--- a/cmd/frostfs-node/config/engine/shard/pilorama/config.go
+++ b/cmd/frostfs-node/config/engine/shard/pilorama/config.go
@@ -52,10 +52,7 @@ func (x *Config) NoSync() bool {
 // Returns 0 if the value is not a positive number.
 func (x *Config) MaxBatchDelay() time.Duration {
 	d := config.DurationSafe((*config.Config)(x), "max_batch_delay")
-	if d <= 0 {
-		d = 0
-	}
-	return d
+	return max(d, 0)
 }
 
 // MaxBatchSize returns the value of "max_batch_size" config parameter.
@@ -63,8 +60,5 @@ func (x *Config) MaxBatchDelay() time.Duration {
 // Returns 0 if the value is not a positive number.
 func (x *Config) MaxBatchSize() int {
 	s := int(config.IntSafe((*config.Config)(x), "max_batch_size"))
-	if s <= 0 {
-		s = 0
-	}
-	return s
+	return max(s, 0)
 }
-- 
2.45.3


From 0cb0aacaef8f5271371a3cdff1a3d54e76e21b74 Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 13 Mar 2025 09:09:14 +0300
Subject: [PATCH 3/6] [#1671] Use `fmt.Appendf` where warranted

Fix gopls warnings:
```
cmd/frostfs-adm/internal/modules/morph/config/config.go:68:20-64: Replace []byte(fmt.Sprintf...) with fmt.Appendf
````

gopatch:
```
@@
var f expression
@@
-[]byte(fmt.Sprintf(f, ...))
+fmt.Appendf(nil, f, ...)
```

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 cmd/frostfs-adm/internal/modules/morph/config/config.go    | 6 +++---
 .../internal/modules/morph/contract/dump_hashes.go         | 4 ++--
 cmd/frostfs-adm/internal/modules/morph/policy/policy.go    | 6 +++---
 cmd/frostfs-cli/modules/control/list_targets.go            | 2 +-
 pkg/local_object_storage/metabase/reset_test.go            | 2 +-
 scripts/populate-metabase/internal/populate.go             | 7 ++-----
 6 files changed, 12 insertions(+), 15 deletions(-)

diff --git a/cmd/frostfs-adm/internal/modules/morph/config/config.go b/cmd/frostfs-adm/internal/modules/morph/config/config.go
index 65ccc9f9f..f64cb4817 100644
--- a/cmd/frostfs-adm/internal/modules/morph/config/config.go
+++ b/cmd/frostfs-adm/internal/modules/morph/config/config.go
@@ -65,14 +65,14 @@ func dumpNetworkConfig(cmd *cobra.Command, _ []string) error {
 			nbuf := make([]byte, 8)
 			copy(nbuf[:], v)
 			n := binary.LittleEndian.Uint64(nbuf)
-			_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%d (int)\n", k, n)))
+			_, _ = tw.Write(fmt.Appendf(nil, "%s:\t%d (int)\n", k, n))
 		case netmap.HomomorphicHashingDisabledKey, netmap.MaintenanceModeAllowedConfig:
 			if len(v) == 0 || len(v) > 1 {
 				return helper.InvalidConfigValueErr(k)
 			}
-			_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%t (bool)\n", k, v[0] == 1)))
+			_, _ = tw.Write(fmt.Appendf(nil, "%s:\t%t (bool)\n", k, v[0] == 1))
 		default:
-			_, _ = tw.Write([]byte(fmt.Sprintf("%s:\t%s (hex)\n", k, hex.EncodeToString(v))))
+			_, _ = tw.Write(fmt.Appendf(nil, "%s:\t%s (hex)\n", k, hex.EncodeToString(v)))
 		}
 	}
 
diff --git a/cmd/frostfs-adm/internal/modules/morph/contract/dump_hashes.go b/cmd/frostfs-adm/internal/modules/morph/contract/dump_hashes.go
index 437e2480d..fb7e4ff62 100644
--- a/cmd/frostfs-adm/internal/modules/morph/contract/dump_hashes.go
+++ b/cmd/frostfs-adm/internal/modules/morph/contract/dump_hashes.go
@@ -219,8 +219,8 @@ func printContractInfo(cmd *cobra.Command, infos []contractDumpInfo) {
 		if info.version == "" {
 			info.version = "unknown"
 		}
-		_, _ = tw.Write([]byte(fmt.Sprintf("%s\t(%s):\t%s\n",
-			info.name, info.version, info.hash.StringLE())))
+		_, _ = tw.Write(fmt.Appendf(nil, "%s\t(%s):\t%s\n",
+			info.name, info.version, info.hash.StringLE()))
 	}
 	_ = tw.Flush()
 
diff --git a/cmd/frostfs-adm/internal/modules/morph/policy/policy.go b/cmd/frostfs-adm/internal/modules/morph/policy/policy.go
index 686a244f0..f2932e87c 100644
--- a/cmd/frostfs-adm/internal/modules/morph/policy/policy.go
+++ b/cmd/frostfs-adm/internal/modules/morph/policy/policy.go
@@ -80,9 +80,9 @@ func dumpPolicyCmd(cmd *cobra.Command, _ []string) error {
 	buf := bytes.NewBuffer(nil)
 	tw := tabwriter.NewWriter(buf, 0, 2, 2, ' ', 0)
 
-	_, _ = tw.Write([]byte(fmt.Sprintf("Execution Fee Factor:\t%d (int)\n", execFee)))
-	_, _ = tw.Write([]byte(fmt.Sprintf("Fee Per Byte:\t%d (int)\n", feePerByte)))
-	_, _ = tw.Write([]byte(fmt.Sprintf("Storage Price:\t%d (int)\n", storagePrice)))
+	_, _ = tw.Write(fmt.Appendf(nil, "Execution Fee Factor:\t%d (int)\n", execFee))
+	_, _ = tw.Write(fmt.Appendf(nil, "Fee Per Byte:\t%d (int)\n", feePerByte))
+	_, _ = tw.Write(fmt.Appendf(nil, "Storage Price:\t%d (int)\n", storagePrice))
 
 	_ = tw.Flush()
 	cmd.Print(buf.String())
diff --git a/cmd/frostfs-cli/modules/control/list_targets.go b/cmd/frostfs-cli/modules/control/list_targets.go
index 8bd2dc9cd..3142d02e7 100644
--- a/cmd/frostfs-cli/modules/control/list_targets.go
+++ b/cmd/frostfs-cli/modules/control/list_targets.go
@@ -62,7 +62,7 @@ func listTargets(cmd *cobra.Command, _ []string) {
 	tw := tabwriter.NewWriter(buf, 0, 2, 2, ' ', 0)
 	_, _ = tw.Write([]byte("#\tName\tType\n"))
 	for i, t := range targets {
-		_, _ = tw.Write([]byte(fmt.Sprintf("%s\t%s\t%s\n", strconv.Itoa(i), t.GetName(), t.GetType())))
+		_, _ = tw.Write(fmt.Appendf(nil, "%s\t%s\t%s\n", strconv.Itoa(i), t.GetName(), t.GetType()))
 	}
 	_ = tw.Flush()
 	cmd.Print(buf.String())
diff --git a/pkg/local_object_storage/metabase/reset_test.go b/pkg/local_object_storage/metabase/reset_test.go
index 45faecc13..5f0956f0b 100644
--- a/pkg/local_object_storage/metabase/reset_test.go
+++ b/pkg/local_object_storage/metabase/reset_test.go
@@ -37,7 +37,7 @@ func TestResetDropsContainerBuckets(t *testing.T) {
 	for idx := range 100 {
 		var putPrm PutPrm
 		putPrm.SetObject(testutil.GenerateObject())
-		putPrm.SetStorageID([]byte(fmt.Sprintf("0/%d", idx)))
+		putPrm.SetStorageID(fmt.Appendf(nil, "0/%d", idx))
 		_, err := db.Put(context.Background(), putPrm)
 		require.NoError(t, err)
 	}
diff --git a/scripts/populate-metabase/internal/populate.go b/scripts/populate-metabase/internal/populate.go
index 4da23a295..fafe61eaa 100644
--- a/scripts/populate-metabase/internal/populate.go
+++ b/scripts/populate-metabase/internal/populate.go
@@ -31,13 +31,10 @@ func PopulateWithObjects(
 
 	for range count {
 		obj := factory()
-
-		id := []byte(fmt.Sprintf(
-			"%c/%c/%c",
+		id := fmt.Appendf(nil, "%c/%c/%c",
 			digits[rand.Int()%len(digits)],
 			digits[rand.Int()%len(digits)],
-			digits[rand.Int()%len(digits)],
-		))
+			digits[rand.Int()%len(digits)])
 
 		prm := meta.PutPrm{}
 		prm.SetObject(obj)
-- 
2.45.3


From 29b02406736511f2fd151de67c5b58415cb3413b Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 13 Mar 2025 09:14:14 +0300
Subject: [PATCH 4/6] [#1671] Use `min` builtin where possible

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 pkg/local_object_storage/pilorama/forest.go | 5 +----
 pkg/morph/client/client.go                  | 5 +----
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/pkg/local_object_storage/pilorama/forest.go b/pkg/local_object_storage/pilorama/forest.go
index 92183716c..ef284a727 100644
--- a/pkg/local_object_storage/pilorama/forest.go
+++ b/pkg/local_object_storage/pilorama/forest.go
@@ -205,10 +205,7 @@ func (f *memoryForest) TreeSortedByFilename(_ context.Context, cid cid.ID, treeI
 	r := mergeNodeInfos(res)
 	for i := range r {
 		if start == nil || string(findAttr(r[i].Meta, AttributeFilename)) > *start {
-			finish := i + count
-			if len(res) < finish {
-				finish = len(res)
-			}
+			finish := min(len(res), i+count)
 			last := string(findAttr(r[finish-1].Meta, AttributeFilename))
 			return r[i:finish], &last, nil
 		}
diff --git a/pkg/morph/client/client.go b/pkg/morph/client/client.go
index 19349ccd5..e63d926e0 100644
--- a/pkg/morph/client/client.go
+++ b/pkg/morph/client/client.go
@@ -262,10 +262,7 @@ func (c *Client) TestInvokeIterator(cb func(stackitem.Item) error, batchSize int
 	}()
 
 	// Batch size for TraverseIterator() can restricted on the server-side.
-	traverseBatchSize := batchSize
-	if invoker.DefaultIteratorResultItems < traverseBatchSize {
-		traverseBatchSize = invoker.DefaultIteratorResultItems
-	}
+	traverseBatchSize := min(batchSize, invoker.DefaultIteratorResultItems)
 	for {
 		items, err := c.rpcActor.TraverseIterator(sid, &r, traverseBatchSize)
 		if err != nil {
-- 
2.45.3


From 803a550c1f65f37b15b3a0493c9a3613ed88d3d3 Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 13 Mar 2025 09:24:44 +0300
Subject: [PATCH 5/6] [#1671] Use `slices.Delete()` where possible

gopatch is missing for this one, because
https://github.com/uber-go/gopatch/issues/179

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 cmd/frostfs-lens/internal/tui/input.go                        | 4 +++-
 .../blobstor/internal/blobstortest/iterate.go                 | 3 ++-
 pkg/local_object_storage/metabase/lock.go                     | 3 ++-
 pkg/services/object/delete/exec.go                            | 3 ++-
 pkg/services/object/search/util.go                            | 3 ++-
 pkg/services/object/util/placement.go                         | 3 ++-
 pkg/services/object_manager/placement/traverser.go            | 4 ++--
 7 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/cmd/frostfs-lens/internal/tui/input.go b/cmd/frostfs-lens/internal/tui/input.go
index 4fdf97119..90729c119 100644
--- a/cmd/frostfs-lens/internal/tui/input.go
+++ b/cmd/frostfs-lens/internal/tui/input.go
@@ -1,6 +1,8 @@
 package tui
 
 import (
+	"slices"
+
 	"github.com/gdamore/tcell/v2"
 	"github.com/rivo/tview"
 )
@@ -26,7 +28,7 @@ func (f *InputFieldWithHistory) AddToHistory(s string) {
 
 	// Used history data for search prompt, so just make that data recent.
 	if f.historyPointer != len(f.history) && s == f.history[f.historyPointer] {
-		f.history = append(f.history[:f.historyPointer], f.history[f.historyPointer+1:]...)
+		f.history = slices.Delete(f.history, f.historyPointer, f.historyPointer+1)
 		f.history = append(f.history, s)
 	}
 
diff --git a/pkg/local_object_storage/blobstor/internal/blobstortest/iterate.go b/pkg/local_object_storage/blobstor/internal/blobstortest/iterate.go
index 36b2c33f8..c11d0888b 100644
--- a/pkg/local_object_storage/blobstor/internal/blobstortest/iterate.go
+++ b/pkg/local_object_storage/blobstor/internal/blobstortest/iterate.go
@@ -3,6 +3,7 @@ package blobstortest
 import (
 	"context"
 	"errors"
+	"slices"
 	"testing"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/blobstor/common"
@@ -26,7 +27,7 @@ func TestIterate(t *testing.T, cons Constructor, minSize, maxSize uint64) {
 	_, err := s.Delete(context.Background(), delPrm)
 	require.NoError(t, err)
 
-	objects = append(objects[:delID], objects[delID+1:]...)
+	objects = slices.Delete(objects, delID, delID+1)
 
 	runTestNormalHandler(t, s, objects)
 
diff --git a/pkg/local_object_storage/metabase/lock.go b/pkg/local_object_storage/metabase/lock.go
index b930a0141..aa1478423 100644
--- a/pkg/local_object_storage/metabase/lock.go
+++ b/pkg/local_object_storage/metabase/lock.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"context"
 	"fmt"
+	"slices"
 	"time"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/local_object_storage/internal/metaerr"
@@ -250,7 +251,7 @@ func freePotentialLocks(tx *bbolt.Tx, idCnr cid.ID, locker oid.ID) ([]oid.Addres
 					unlockedObjects = append(unlockedObjects, addr)
 				} else {
 					// exclude locker
-					keyLockers = append(keyLockers[:i], keyLockers[i+1:]...)
+					keyLockers = slices.Delete(keyLockers, i, i+1)
 
 					v, err = encodeList(keyLockers)
 					if err != nil {
diff --git a/pkg/services/object/delete/exec.go b/pkg/services/object/delete/exec.go
index 36a17bde2..a99ba3586 100644
--- a/pkg/services/object/delete/exec.go
+++ b/pkg/services/object/delete/exec.go
@@ -4,6 +4,7 @@ import (
 	"context"
 	"errors"
 	"fmt"
+	"slices"
 	"strconv"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/internal/logs"
@@ -182,7 +183,7 @@ func (exec *execCtx) addMembers(incoming []oid.ID) {
 	for i := range members {
 		for j := 0; j < len(incoming); j++ { // don't use range, slice mutates in body
 			if members[i].Equals(incoming[j]) {
-				incoming = append(incoming[:j], incoming[j+1:]...)
+				incoming = slices.Delete(incoming, j, j+1)
 				j--
 			}
 		}
diff --git a/pkg/services/object/search/util.go b/pkg/services/object/search/util.go
index fed168187..0be5345b9 100644
--- a/pkg/services/object/search/util.go
+++ b/pkg/services/object/search/util.go
@@ -2,6 +2,7 @@ package searchsvc
 
 import (
 	"context"
+	"slices"
 	"sync"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/client"
@@ -53,7 +54,7 @@ func (w *uniqueIDWriter) WriteIDs(list []oid.ID) error {
 		}
 
 		// exclude processed address
-		list = append(list[:i], list[i+1:]...)
+		list = slices.Delete(list, i, i+1)
 		i--
 	}
 
diff --git a/pkg/services/object/util/placement.go b/pkg/services/object/util/placement.go
index 195944f92..f74b0aab9 100644
--- a/pkg/services/object/util/placement.go
+++ b/pkg/services/object/util/placement.go
@@ -3,6 +3,7 @@ package util
 import (
 	"context"
 	"fmt"
+	"slices"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/container"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/pkg/core/netmap"
@@ -93,7 +94,7 @@ func (p *remotePlacement) BuildPlacement(ctx context.Context, cnr cid.ID, obj *o
 			}
 
 			if p.netmapKeys.IsLocalKey(vs[i][j].PublicKey()) {
-				vs[i] = append(vs[i][:j], vs[i][j+1:]...)
+				vs[i] = slices.Delete(vs[i], j, j+1)
 				j--
 			}
 		}
diff --git a/pkg/services/object_manager/placement/traverser.go b/pkg/services/object_manager/placement/traverser.go
index efa4a5b06..a3f9af959 100644
--- a/pkg/services/object_manager/placement/traverser.go
+++ b/pkg/services/object_manager/placement/traverser.go
@@ -288,8 +288,8 @@ func (t *Traverser) Next() []Node {
 func (t *Traverser) skipEmptyVectors() {
 	for i := 0; i < len(t.vectors); i++ { // don't use range, slice changes in body
 		if len(t.vectors[i]) == 0 && t.rem[i] <= 0 || t.rem[0] == 0 {
-			t.vectors = append(t.vectors[:i], t.vectors[i+1:]...)
-			t.rem = append(t.rem[:i], t.rem[i+1:]...)
+			t.vectors = slices.Delete(t.vectors, i, i+1)
+			t.rem = slices.Delete(t.rem, i, i+1)
 			i--
 		} else {
 			break
-- 
2.45.3


From 14837b17c61f21aa8c8330d8d3767e27eb79151d Mon Sep 17 00:00:00 2001
From: Evgenii Stratonikov <e.stratonikov@yadro.com>
Date: Thu, 13 Mar 2025 09:34:59 +0300
Subject: [PATCH 6/6] [#1671] Use `slices.ContainsFunc()` where possible

Signed-off-by: Evgenii Stratonikov <e.stratonikov@yadro.com>
---
 .../internal/modules/morph/helper/netmap.go         |  8 +++-----
 pkg/network/group.go                                |  7 +++----
 pkg/services/object/acl/v2/util_test.go             |  9 ++-------
 pkg/services/policer/policer_test.go                |  7 +++----
 pkg/services/tree/service.go                        | 13 +++++--------
 5 files changed, 16 insertions(+), 28 deletions(-)

diff --git a/cmd/frostfs-adm/internal/modules/morph/helper/netmap.go b/cmd/frostfs-adm/internal/modules/morph/helper/netmap.go
index fb8f03783..20abaff0a 100644
--- a/cmd/frostfs-adm/internal/modules/morph/helper/netmap.go
+++ b/cmd/frostfs-adm/internal/modules/morph/helper/netmap.go
@@ -3,6 +3,7 @@ package helper
 import (
 	"errors"
 	"fmt"
+	"slices"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/commonflags"
 	"git.frostfs.info/TrueCloudLab/frostfs-node/cmd/frostfs-adm/internal/modules/morph/constants"
@@ -118,11 +119,8 @@ func MergeNetmapConfig(roInvoker *invoker.Invoker, md map[string]any) error {
 		return err
 	}
 	for k, v := range m {
-		for _, key := range NetmapConfigKeys {
-			if k == key {
-				md[k] = v
-				break
-			}
+		if slices.Contains(NetmapConfigKeys, k) {
+			md[k] = v
 		}
 	}
 	return nil
diff --git a/pkg/network/group.go b/pkg/network/group.go
index 9843b14d4..5a71e530e 100644
--- a/pkg/network/group.go
+++ b/pkg/network/group.go
@@ -3,6 +3,7 @@ package network
 import (
 	"errors"
 	"fmt"
+	"slices"
 	"sort"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/netmap"
@@ -164,10 +165,8 @@ func WriteToNodeInfo(g AddressGroup, ni *netmap.NodeInfo) {
 // at least one common address.
 func (x AddressGroup) Intersects(x2 AddressGroup) bool {
 	for i := range x {
-		for j := range x2 {
-			if x[i].equal(x2[j]) {
-				return true
-			}
+		if slices.ContainsFunc(x2, x[i].equal) {
+			return true
 		}
 	}
 
diff --git a/pkg/services/object/acl/v2/util_test.go b/pkg/services/object/acl/v2/util_test.go
index 4b19cecfe..40fce8877 100644
--- a/pkg/services/object/acl/v2/util_test.go
+++ b/pkg/services/object/acl/v2/util_test.go
@@ -4,6 +4,7 @@ import (
 	"crypto/ecdsa"
 	"crypto/elliptic"
 	"crypto/rand"
+	"slices"
 	"testing"
 
 	"git.frostfs.info/TrueCloudLab/frostfs-sdk-go/api/acl"
@@ -91,13 +92,7 @@ func TestIsVerbCompatible(t *testing.T) {
 
 	for op, list := range table {
 		for _, verb := range verbs {
-			var contains bool
-			for _, v := range list {
-				if v == verb {
-					contains = true
-					break
-				}
-			}
+			contains := slices.Contains(list, verb)
 
 			tok.ForVerb(verb)
 
diff --git a/pkg/services/policer/policer_test.go b/pkg/services/policer/policer_test.go
index cef4c36d9..049c33753 100644
--- a/pkg/services/policer/policer_test.go
+++ b/pkg/services/policer/policer_test.go
@@ -4,6 +4,7 @@ import (
 	"bytes"
 	"context"
 	"errors"
+	"slices"
 	"sort"
 	"testing"
 	"time"
@@ -226,10 +227,8 @@ func TestProcessObject(t *testing.T) {
 						return nil, err
 					}
 				}
-				for _, i := range ti.objHolders {
-					if index == i {
-						return nil, nil
-					}
+				if slices.Contains(ti.objHolders, index) {
+					return nil, nil
 				}
 				return nil, new(apistatus.ObjectNotFound)
 			}
diff --git a/pkg/services/tree/service.go b/pkg/services/tree/service.go
index 2e9722e79..cb97b42e7 100644
--- a/pkg/services/tree/service.go
+++ b/pkg/services/tree/service.go
@@ -340,14 +340,11 @@ func (s *Service) GetNodeByPath(ctx context.Context, req *GetNodeByPathRequest)
 		} else {
 			var metaValue []KeyValue
 			for _, kv := range m.Items {
-				for _, attr := range b.GetAttributes() {
-					if kv.Key == attr {
-						metaValue = append(metaValue, KeyValue{
-							Key:   kv.Key,
-							Value: kv.Value,
-						})
-						break
-					}
+				if slices.Contains(b.GetAttributes(), kv.Key) {
+					metaValue = append(metaValue, KeyValue{
+						Key:   kv.Key,
+						Value: kv.Value,
+					})
 				}
 			}
 			x.Meta = metaValue
-- 
2.45.3