diff --git a/events/event_stream.go b/events/event_stream.go index 7552d2e018..b71db4ce33 100644 --- a/events/event_stream.go +++ b/events/event_stream.go @@ -2,7 +2,7 @@ package events import ( "context" - "math/rand" + "math/rand/v2" "runtime" "github.com/9seconds/mtg/v2/mtglib" @@ -64,7 +64,7 @@ func NewEventStream(observerFactories []ObserverFactory) EventStream { chans: make([]chan mtglib.Event, runtime.NumCPU()), } - for i := 0; i < runtime.NumCPU(); i++ { + for i := range runtime.NumCPU() { rv.chans[i] = make(chan mtglib.Event, 1) if len(observerFactories) == 1 { diff --git a/events/multi_observer.go b/events/multi_observer.go index 2b529cde9c..f59d63e5bb 100644 --- a/events/multi_observer.go +++ b/events/multi_observer.go @@ -12,14 +12,11 @@ type multiObserver struct { func (m multiObserver) EventStart(evt mtglib.EventStart) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventStart(evt) - }(v) + wg.Go(func() { + v.EventStart(evt) + }) } wg.Wait() @@ -27,14 +24,11 @@ func (m multiObserver) EventStart(evt mtglib.EventStart) { func (m multiObserver) EventConnectedToDC(evt mtglib.EventConnectedToDC) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventConnectedToDC(evt) - }(v) + wg.Go(func() { + v.EventConnectedToDC(evt) + }) } wg.Wait() @@ -42,14 +36,11 @@ func (m multiObserver) EventConnectedToDC(evt mtglib.EventConnectedToDC) { func (m multiObserver) EventDomainFronting(evt mtglib.EventDomainFronting) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventDomainFronting(evt) - }(v) + wg.Go(func() { + v.EventDomainFronting(evt) + }) } wg.Wait() @@ -57,14 +48,11 @@ func (m multiObserver) EventDomainFronting(evt mtglib.EventDomainFronting) { func (m multiObserver) EventTraffic(evt mtglib.EventTraffic) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventTraffic(evt) - }(v) + wg.Go(func() { + v.EventTraffic(evt) + }) } wg.Wait() @@ -72,14 +60,11 @@ func (m multiObserver) EventTraffic(evt mtglib.EventTraffic) { func (m multiObserver) EventFinish(evt mtglib.EventFinish) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventFinish(evt) - }(v) + wg.Go(func() { + v.EventFinish(evt) + }) } wg.Wait() @@ -87,14 +72,11 @@ func (m multiObserver) EventFinish(evt mtglib.EventFinish) { func (m multiObserver) EventConcurrencyLimited(evt mtglib.EventConcurrencyLimited) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventConcurrencyLimited(evt) - }(v) + wg.Go(func() { + v.EventConcurrencyLimited(evt) + }) } wg.Wait() @@ -102,14 +84,11 @@ func (m multiObserver) EventConcurrencyLimited(evt mtglib.EventConcurrencyLimite func (m multiObserver) EventIPBlocklisted(evt mtglib.EventIPBlocklisted) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventIPBlocklisted(evt) - }(v) + wg.Go(func() { + v.EventIPBlocklisted(evt) + }) } wg.Wait() @@ -117,14 +96,11 @@ func (m multiObserver) EventIPBlocklisted(evt mtglib.EventIPBlocklisted) { func (m multiObserver) EventReplayAttack(evt mtglib.EventReplayAttack) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventReplayAttack(evt) - }(v) + wg.Go(func() { + v.EventReplayAttack(evt) + }) } wg.Wait() @@ -132,14 +108,11 @@ func (m multiObserver) EventReplayAttack(evt mtglib.EventReplayAttack) { func (m multiObserver) EventIPListSize(evt mtglib.EventIPListSize) { wg := &sync.WaitGroup{} - wg.Add(len(m.observers)) for _, v := range m.observers { - go func(obs Observer) { - defer wg.Done() - - obs.EventIPListSize(evt) - }(v) + wg.Go(func() { + v.EventIPListSize(evt) + }) } wg.Wait() diff --git a/internal/cli/access.go b/internal/cli/access.go index 2e99c98adf..4657822356 100644 --- a/internal/cli/access.go +++ b/internal/cli/access.go @@ -61,11 +61,8 @@ func (a *Access) Run(cli *CLI, version string) error { } wg := &sync.WaitGroup{} - wg.Add(2) - - go func() { - defer wg.Done() + wg.Go(func() { ip := a.PublicIPv4 if ip == nil { ip = a.getIP(ntw, "tcp4") @@ -76,11 +73,8 @@ func (a *Access) Run(cli *CLI, version string) error { } resp.IPv4 = a.makeURLs(conf, ip) - }() - - go func() { - defer wg.Done() - + }) + wg.Go(func() { ip := a.PublicIPv6 if ip == nil { ip = a.getIP(ntw, "tcp6") @@ -91,7 +85,7 @@ func (a *Access) Run(cli *CLI, version string) error { } resp.IPv6 = a.makeURLs(conf, ip) - }() + }) wg.Wait() diff --git a/internal/config/type_bool_test.go b/internal/config/type_bool_test.go index 99d0488f59..8098f05c10 100644 --- a/internal/config/type_bool_test.go +++ b/internal/config/type_bool_test.go @@ -20,7 +20,7 @@ type TypeBoolTestSuite struct { } func (suite *TypeBoolTestSuite) TestUnmarshalFail() { - testData := []interface{}{ + testData := []any{ "", "np", "нет", @@ -29,7 +29,7 @@ func (suite *TypeBoolTestSuite) TestUnmarshalFail() { } for _, v := range testData { - data, err := json.Marshal(map[string]interface{}{ + data, err := json.Marshal(map[string]any{ "value": v, }) suite.NoError(err) diff --git a/ipblocklist/firehol.go b/ipblocklist/firehol.go index c2682d6671..f219560c75 100644 --- a/ipblocklist/firehol.go +++ b/ipblocklist/firehol.go @@ -112,18 +112,15 @@ func (f *Firehol) update() { defer cancel() wg := &sync.WaitGroup{} - wg.Add(len(f.blocklists)) mutex := &sync.Mutex{} ranger := cidranger.NewPCTrieRanger() for _, v := range f.blocklists { - go func(file files.File) { - defer wg.Done() + wg.Go(func() { + logger := f.logger.BindStr("filename", v.String()) - logger := f.logger.BindStr("filename", file.String()) - - fileContent, err := file.Open(ctx) + fileContent, err := v.Open(ctx) if err != nil { logger.WarningError("update has failed", err) @@ -135,7 +132,7 @@ func (f *Firehol) update() { if err := f.updateFromFile(mutex, ranger, bufio.NewScanner(fileContent)); err != nil { logger.WarningError("update has failed", err) } - }(v) + }) } wg.Wait() diff --git a/logger/init.go b/logger/init.go index da4ff400c4..56906fcd86 100644 --- a/logger/init.go +++ b/logger/init.go @@ -8,5 +8,5 @@ package logger // commonly used by many 3pp tools. While mtglib itself does not need it, it is // always a good idea to support it and have a transient end to end logging. type StdLikeLogger interface { - Printf(format string, args ...interface{}) + Printf(format string, args ...any) } diff --git a/logger/noop.go b/logger/noop.go index 5d04b795eb..768e48b649 100644 --- a/logger/noop.go +++ b/logger/noop.go @@ -8,7 +8,7 @@ func (n noopLogger) Named(_ string) mtglib.Logger { return n } func (n noopLogger) BindInt(_ string, _ int) mtglib.Logger { return n } func (n noopLogger) BindStr(_, _ string) mtglib.Logger { return n } func (n noopLogger) BindJSON(_, _ string) mtglib.Logger { return n } -func (n noopLogger) Printf(_ string, _ ...interface{}) {} +func (n noopLogger) Printf(_ string, _ ...any) {} func (n noopLogger) Info(_ string) {} func (n noopLogger) Warning(_ string) {} func (n noopLogger) Debug(_ string) {} diff --git a/logger/zerolog.go b/logger/zerolog.go index 4f9c9b7052..4cf7cd6c67 100644 --- a/logger/zerolog.go +++ b/logger/zerolog.go @@ -78,7 +78,7 @@ func (z *zeroLogContext) BindJSON(name, value string) mtglib.Logger { } } -func (z *zeroLogContext) Printf(format string, args ...interface{}) { +func (z *zeroLogContext) Printf(format string, args ...any) { z.Debug(fmt.Sprintf(format, args...)) } diff --git a/mise.lock b/mise.lock index 3ffdb54c94..d6b2d74af7 100644 --- a/mise.lock +++ b/mise.lock @@ -12,7 +12,7 @@ version = "latest" backend = "go:golang.org/x/pkgsite/cmd/pkgsite" [[tools."go:golang.org/x/tools/gopls"]] -version = "0.21.0" +version = "0.21.1" backend = "go:golang.org/x/tools/gopls" [[tools."go:mvdan.cc/gofumpt"]] @@ -20,13 +20,13 @@ version = "0.9.2" backend = "go:mvdan.cc/gofumpt" [[tools.golangci-lint]] -version = "2.9.0" +version = "2.10.1" backend = "aqua:golangci/golangci-lint" -"platforms.linux-arm64" = { checksum = "sha256:94e80cdb51c73c20a313bd3afa1fb23137728813c19fd730248a1e8678fcc46d", url = "https://github.com/golangci/golangci-lint/releases/download/v2.9.0/golangci-lint-2.9.0-linux-arm64.tar.gz"} -"platforms.linux-x64" = { checksum = "sha256:493aaaca2eba6c8bcef847d92716bbd91bbac4b22cdbb0ab5b6a581b32946091", url = "https://github.com/golangci/golangci-lint/releases/download/v2.9.0/golangci-lint-2.9.0-linux-amd64.tar.gz"} -"platforms.macos-arm64" = { checksum = "sha256:a86eabba3507deddd21f2a01a1df2a0ee5bc5c8178d4165cdcaaad8597358760", url = "https://github.com/golangci/golangci-lint/releases/download/v2.9.0/golangci-lint-2.9.0-darwin-arm64.tar.gz"} -"platforms.macos-x64" = { checksum = "sha256:ba29a353be54a74c45946763983808dc8305eeeca73db1761b5ab112f87f8157", url = "https://github.com/golangci/golangci-lint/releases/download/v2.9.0/golangci-lint-2.9.0-darwin-amd64.tar.gz"} -"platforms.windows-x64" = { checksum = "sha256:130fca8fa959eb840267c5e231f030a948e0de1e768bf6a31785505d1061632c", url = "https://github.com/golangci/golangci-lint/releases/download/v2.9.0/golangci-lint-2.9.0-windows-amd64.zip"} +"platforms.linux-arm64" = { checksum = "sha256:6652b42ae02915eb2f9cb2a2e0cac99514c8eded8388d88ae3e06e1a52c00de8", url = "https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-linux-arm64.tar.gz"} +"platforms.linux-x64" = { checksum = "sha256:dfa775874cf0561b404a02a8f4481fc69b28091da95aa697259820d429b09c99", url = "https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-linux-amd64.tar.gz"} +"platforms.macos-arm64" = { checksum = "sha256:03bfadf67e52b441b7ec21305e501c717df93c959836d66c7f97312654acb297", url = "https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-darwin-arm64.tar.gz"} +"platforms.macos-x64" = { checksum = "sha256:66fb0da81b8033b477f97eea420d4b46b230ca172b8bb87c6610109f3772b6b6", url = "https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-darwin-amd64.tar.gz"} +"platforms.windows-x64" = { checksum = "sha256:c60c87695e79db8e320f0e5be885059859de52bb5ee5f11be5577828570bc2a3", url = "https://github.com/golangci/golangci-lint/releases/download/v2.10.1/golangci-lint-2.10.1-windows-amd64.zip"} [[tools.goreleaser]] version = "2.13.3" diff --git a/mtglib/init.go b/mtglib/init.go index 40e3f41260..81dee7a014 100644 --- a/mtglib/init.go +++ b/mtglib/init.go @@ -249,7 +249,7 @@ type Logger interface { BindJSON(name, value string) Logger // Printf is to support log.Logger behavior. - Printf(format string, args ...interface{}) + Printf(format string, args ...any) // Info puts a message about some normal situation. Info(msg string) diff --git a/mtglib/init_internal_test.go b/mtglib/init_internal_test.go index b182d57c69..50833e83c3 100644 --- a/mtglib/init_internal_test.go +++ b/mtglib/init_internal_test.go @@ -8,17 +8,17 @@ import ( type NoopLogger struct{} -func (n NoopLogger) Named(_ string) Logger { return n } -func (n NoopLogger) BindInt(_ string, _ int) Logger { return n } -func (n NoopLogger) BindStr(_, _ string) Logger { return n } -func (n NoopLogger) BindJSON(_, _ string) Logger { return n } -func (n NoopLogger) Printf(_ string, _ ...interface{}) {} -func (n NoopLogger) Info(_ string) {} -func (n NoopLogger) Warning(_ string) {} -func (n NoopLogger) Debug(_ string) {} -func (n NoopLogger) InfoError(_ string, _ error) {} -func (n NoopLogger) WarningError(_ string, _ error) {} -func (n NoopLogger) DebugError(_ string, _ error) {} +func (n NoopLogger) Named(_ string) Logger { return n } +func (n NoopLogger) BindInt(_ string, _ int) Logger { return n } +func (n NoopLogger) BindStr(_, _ string) Logger { return n } +func (n NoopLogger) BindJSON(_, _ string) Logger { return n } +func (n NoopLogger) Printf(_ string, _ ...any) {} +func (n NoopLogger) Info(_ string) {} +func (n NoopLogger) Warning(_ string) {} +func (n NoopLogger) Debug(_ string) {} +func (n NoopLogger) InfoError(_ string, _ error) {} +func (n NoopLogger) WarningError(_ string, _ error) {} +func (n NoopLogger) DebugError(_ string, _ error) {} type EventStreamMock struct { mock.Mock diff --git a/mtglib/internal/faketls/client_hello.go b/mtglib/internal/faketls/client_hello.go index d27d769cce..0e5e5b4a22 100644 --- a/mtglib/internal/faketls/client_hello.go +++ b/mtglib/internal/faketls/client_hello.go @@ -76,7 +76,7 @@ func ParseClientHello(secret, handshake []byte) (ClientHello, error) { computedRandom := mac.Sum(nil) - for i := 0; i < RandomLen; i++ { + for i := range RandomLen { computedRandom[i] ^= hello.Random[i] } diff --git a/mtglib/internal/faketls/conn.go b/mtglib/internal/faketls/conn.go index f88771c15b..85acee2c6e 100644 --- a/mtglib/internal/faketls/conn.go +++ b/mtglib/internal/faketls/conn.go @@ -3,7 +3,7 @@ package faketls import ( "bytes" "fmt" - "math/rand" + "math/rand/v2" "github.com/9seconds/mtg/v2/essentials" "github.com/9seconds/mtg/v2/mtglib/internal/faketls/record" @@ -53,7 +53,7 @@ func (c *Conn) Write(p []byte) (int, error) { lenP := len(p) for len(p) > 0 { - chunkSize := rand.Intn(record.TLSMaxRecordSize) + chunkSize := rand.IntN(record.TLSMaxRecordSize) if chunkSize > len(p) || chunkSize == 0 { chunkSize = len(p) } diff --git a/mtglib/internal/faketls/conn_test.go b/mtglib/internal/faketls/conn_test.go index c60dec973b..29a8c0dd42 100644 --- a/mtglib/internal/faketls/conn_test.go +++ b/mtglib/internal/faketls/conn_test.go @@ -2,9 +2,9 @@ package faketls_test import ( "bytes" + "crypto/rand" "errors" "io" - "math/rand" "testing" "github.com/9seconds/mtg/v2/internal/testlib" @@ -123,7 +123,7 @@ func (suite *ConnTestSuite) TestWrite() { suite.connMock.On("Write", mock.Anything).Return(0, nil) dataToRec := make([]byte, record.TLSMaxRecordSize*2) - rand.Read(dataToRec) //nolint: staticcheck + rand.Read(dataToRec) //nolint: staticcheck, errcheck n, err := suite.c.Write(dataToRec) suite.NoError(err) diff --git a/mtglib/internal/faketls/pools.go b/mtglib/internal/faketls/pools.go index 54183a0875..b1f4275c17 100644 --- a/mtglib/internal/faketls/pools.go +++ b/mtglib/internal/faketls/pools.go @@ -6,7 +6,7 @@ import ( ) var bytesBufferPool = sync.Pool{ - New: func() interface{} { + New: func() any { return &bytes.Buffer{} }, } diff --git a/mtglib/internal/faketls/record/pools.go b/mtglib/internal/faketls/record/pools.go index cc4739a5e3..4f758b7843 100644 --- a/mtglib/internal/faketls/record/pools.go +++ b/mtglib/internal/faketls/record/pools.go @@ -5,7 +5,7 @@ import ( ) var recordPool = sync.Pool{ - New: func() interface{} { + New: func() any { return &Record{} }, } diff --git a/mtglib/internal/faketls/welcome.go b/mtglib/internal/faketls/welcome.go index 8af46e44f8..0d91dac1b0 100644 --- a/mtglib/internal/faketls/welcome.go +++ b/mtglib/internal/faketls/welcome.go @@ -6,7 +6,7 @@ import ( "crypto/sha256" "encoding/binary" "io" - mrand "math/rand" + mrand "math/rand/v2" "github.com/9seconds/mtg/v2/mtglib/internal/faketls/record" "golang.org/x/crypto/curve25519" @@ -36,7 +36,7 @@ func SendWelcomePacket(writer io.Writer, secret []byte, clientHello ClientHello) rec.Type = record.TypeApplicationData rec.Version = record.Version12 - if _, err := io.CopyN(&rec.Payload, rand.Reader, int64(1024+mrand.Intn(3092))); err != nil { + if _, err := io.CopyN(&rec.Payload, rand.Reader, int64(1024+mrand.IntN(3092))); err != nil { panic(err) } diff --git a/mtglib/internal/faketls/welcome_test.go b/mtglib/internal/faketls/welcome_test.go index 43ba033599..e7220073df 100644 --- a/mtglib/internal/faketls/welcome_test.go +++ b/mtglib/internal/faketls/welcome_test.go @@ -3,8 +3,8 @@ package faketls_test import ( "bytes" "crypto/hmac" + "crypto/rand" "crypto/sha256" - "math/rand" "testing" "time" diff --git a/mtglib/internal/obfuscated2/handshake_frame.go b/mtglib/internal/obfuscated2/handshake_frame.go index 8fec8897e3..0dd3c6ce5a 100644 --- a/mtglib/internal/obfuscated2/handshake_frame.go +++ b/mtglib/internal/obfuscated2/handshake_frame.go @@ -63,7 +63,7 @@ func (h *handshakeFrame) connectionType() []byte { func (h *handshakeFrame) invert() handshakeFrame { copyFrame := *h - for i := 0; i < handshakeFrameLenKey+handshakeFrameLenIV; i++ { + for i := range handshakeFrameLenKey + handshakeFrameLenIV { copyFrame.data[handshakeFrameOffsetKey+i] = h.data[handshakeFrameOffsetConnectionType-1-i] } diff --git a/mtglib/internal/obfuscated2/init_test.go b/mtglib/internal/obfuscated2/init_test.go index 50d031c8ed..5aa85a99b9 100644 --- a/mtglib/internal/obfuscated2/init_test.go +++ b/mtglib/internal/obfuscated2/init_test.go @@ -117,7 +117,7 @@ func NewServerHandshakeTestData(t *testing.T) ServerHandshakeTestData { serverEncryptedReverted := make([]byte, len(serverEncrypted)) - for i := 0; i < 32+16; i++ { + for i := range 32 + 16 { serverEncryptedReverted[8+i] = serverEncrypted[8+32+16-1-i] } diff --git a/mtglib/internal/obfuscated2/pools.go b/mtglib/internal/obfuscated2/pools.go index f714262d1f..5f10fd2094 100644 --- a/mtglib/internal/obfuscated2/pools.go +++ b/mtglib/internal/obfuscated2/pools.go @@ -9,12 +9,12 @@ import ( var ( sha256HasherPool = sync.Pool{ - New: func() interface{} { + New: func() any { return sha256.New() }, } bytesBufferPool = sync.Pool{ - New: func() interface{} { + New: func() any { return &bytes.Buffer{} }, } diff --git a/mtglib/internal/relay/init.go b/mtglib/internal/relay/init.go index a0dcb0c3f9..8bcc66c9b8 100644 --- a/mtglib/internal/relay/init.go +++ b/mtglib/internal/relay/init.go @@ -5,5 +5,5 @@ const ( ) type Logger interface { - Printf(msg string, args ...interface{}) + Printf(msg string, args ...any) } diff --git a/mtglib/internal/relay/init_test.go b/mtglib/internal/relay/init_test.go index e43244a88f..c884532e0a 100644 --- a/mtglib/internal/relay/init_test.go +++ b/mtglib/internal/relay/init_test.go @@ -2,4 +2,4 @@ package relay_test type loggerMock struct{} -func (l loggerMock) Printf(format string, args ...interface{}) {} +func (l loggerMock) Printf(format string, args ...any) {} diff --git a/mtglib/internal/relay/pools.go b/mtglib/internal/relay/pools.go index 49ac7acad1..db42933b65 100644 --- a/mtglib/internal/relay/pools.go +++ b/mtglib/internal/relay/pools.go @@ -3,7 +3,7 @@ package relay import "sync" var copyBufferPool = sync.Pool{ - New: func() interface{} { + New: func() any { rv := make([]byte, copyBufferSize) return &rv diff --git a/mtglib/proxy.go b/mtglib/proxy.go index 830a2f9af1..104c723796 100644 --- a/mtglib/proxy.go +++ b/mtglib/proxy.go @@ -323,7 +323,7 @@ func NewProxy(opts ProxyOpts) (*Proxy, error) { } pool, err := ants.NewPoolWithFunc(opts.getConcurrency(), - func(arg interface{}) { + func(arg any) { proxy.ServeConn(arg.(essentials.Conn)) //nolint: forcetypeassert }, ants.WithLogger(opts.getLogger("ants")), diff --git a/mtglib/stream_context.go b/mtglib/stream_context.go index 3c6a7399b3..3858282ba9 100644 --- a/mtglib/stream_context.go +++ b/mtglib/stream_context.go @@ -32,7 +32,7 @@ func (s *streamContext) Err() error { return s.ctx.Err() //nolint: wrapcheck } -func (s *streamContext) Value(key interface{}) interface{} { +func (s *streamContext) Value(key any) any { return s.ctx.Value(key) } diff --git a/network/circuit_breaker_internal_test.go b/network/circuit_breaker_internal_test.go index 16a844337d..a665e21ba2 100644 --- a/network/circuit_breaker_internal_test.go +++ b/network/circuit_breaker_internal_test.go @@ -52,17 +52,9 @@ func (suite *CircuitBreakerTestSuite) TestMultipleRunsOk() { Return(suite.connMock, nil) wg := &sync.WaitGroup{} - wg.Add(5) - - go func() { - wg.Wait() - suite.ctxCancel() - }() - - for i := 0; i < 5; i++ { - go func() { - defer wg.Done() + for range 5 { + wg.Go(func() { conn, err := suite.d.DialContext(suite.ctx, "tcp", "127.0.0.1") suite.mutex.Lock() @@ -70,9 +62,14 @@ func (suite *CircuitBreakerTestSuite) TestMultipleRunsOk() { suite.NoError(err) suite.Equal("127.0.0.1:3128", conn.RemoteAddr().String()) - }() + }) } + go func() { + wg.Wait() + suite.ctxCancel() + }() + suite.Eventually(func() bool { _, ok := <-suite.ctx.Done() diff --git a/network/load_balanced_socks5.go b/network/load_balanced_socks5.go index f6d0a82bdd..8aec387162 100644 --- a/network/load_balanced_socks5.go +++ b/network/load_balanced_socks5.go @@ -3,7 +3,7 @@ package network import ( "context" "fmt" - "math/rand" + "math/rand/v2" "net/url" "github.com/9seconds/mtg/v2/essentials" @@ -19,7 +19,7 @@ func (l loadBalancedSocks5Dialer) Dial(network, address string) (essentials.Conn func (l loadBalancedSocks5Dialer) DialContext(ctx context.Context, network, address string) (essentials.Conn, error) { length := len(l.dialers) - start := rand.Intn(length) + start := rand.IntN(length) moved := false for i := start; i != start || !moved; i = (i + 1) % length { diff --git a/network/load_balanced_socks5_test.go b/network/load_balanced_socks5_test.go index 1d5e86c785..96298ac37f 100644 --- a/network/load_balanced_socks5_test.go +++ b/network/load_balanced_socks5_test.go @@ -64,7 +64,7 @@ func (suite *LoadBalancedSocks5TestSuite) TestCannotDial() { }) suite.NoError(err) - for i := 0; i < network.ProxyDialerOpenThreshold*2; i++ { + for range network.ProxyDialerOpenThreshold * 2 { _, err = lbDialer.Dial("tcp", "127.1.1.1:80") suite.True(errors.Is(err, network.ErrCannotDialWithAllProxies)) } diff --git a/network/network.go b/network/network.go index 3f68b112e1..7a7b332e70 100644 --- a/network/network.go +++ b/network/network.go @@ -3,7 +3,7 @@ package network import ( "context" "fmt" - "math/rand" + "math/rand/v2" "net" "net/http" "sync" @@ -81,32 +81,24 @@ func (n *network) dnsResolve(protocol, address string) ([]string, error) { switch protocol { case "tcp", "tcp4": - wg.Add(1) - - go func() { - defer wg.Done() - + wg.Go(func() { resolved := n.dns.LookupA(address) mutex.Lock() ips = append(ips, resolved...) mutex.Unlock() - }() + }) } switch protocol { case "tcp", "tcp6": - wg.Add(1) - - go func() { - defer wg.Done() - + wg.Go(func() { resolved := n.dns.LookupAAAA(address) mutex.Lock() ips = append(ips, resolved...) mutex.Unlock() - }() + }) } wg.Wait() diff --git a/stats/pools.go b/stats/pools.go index a8c962197c..f80286a7c0 100644 --- a/stats/pools.go +++ b/stats/pools.go @@ -3,7 +3,7 @@ package stats import "sync" var streamInfoPool = sync.Pool{ - New: func() interface{} { + New: func() any { return &streamInfo{ tags: make(map[string]string), }