git » dnss » commit 26c4523

Apply `go fix` to simplify using modern features

author Alberto Bertogli
2026-10-23 19:48:46 UTC
committer Alberto Bertogli
2026-10-23 19:48:46 UTC
parent 90bda13c0d39a7b38e72a89e943fb956f29e191e

Apply `go fix` to simplify using modern features

This patch contains the result of running `go fix ./...`, which applies
simplifications that make use of modern language features.

There are no logic or behaviour changes.

dnss.go +4 -8
internal/dnsserver/caching_test.go +6 -6
internal/dnsserver/domainmap.go +1 -1
internal/dnsserver/server.go +4 -8
internal/httpresolver/resolver_test.go +1 -1
internal/nettrace/bench_test.go +2 -2
internal/nettrace/histogram.go +1 -1
internal/nettrace/http_test.go +1 -1
internal/nettrace/trace.go +8 -9
internal/nettrace/trace_test.go +3 -3
internal/testutil/testutil.go +1 -1
internal/trace/trace.go +3 -3

diff --git a/dnss.go b/dnss.go
index 44152f8..f0298da 100644
--- a/dnss.go
+++ b/dnss.go
@@ -123,11 +123,9 @@ func main() {
 		dth := dnsserver.New(*dnsListenAddr, resolver,
 			*dnsUnqualifiedUpstream, overrides)
 
-		wg.Add(1)
-		go func() {
-			defer wg.Done()
+		wg.Go(func() {
 			dth.ListenAndServe()
-		}()
+		})
 	}
 
 	// HTTPS to DNS.
@@ -140,11 +138,9 @@ func main() {
 			Insecure: *insecureHTTPServer,
 		}
 
-		wg.Add(1)
-		go func() {
-			defer wg.Done()
+		wg.Go(func() {
 			s.ListenAndServe()
-		}()
+		})
 	}
 
 	wg.Wait()
diff --git a/internal/dnsserver/caching_test.go b/internal/dnsserver/caching_test.go
index 168163a..02d814d 100644
--- a/internal/dnsserver/caching_test.go
+++ b/internal/dnsserver/caching_test.go
@@ -239,7 +239,7 @@ func TestMinTTL(t *testing.T) {
 	r.Response.Answer = append(r.Response.Answer,
 		mustNewRR(t, "cdn.test. 30 A 1.2.3.4"))
 	req := newQuery("test.", dns.TypeA)
-	for i := 0; i < 2; i++ {
+	for range 2 {
 		if _, err := c.Query(req, tr); err != nil {
 			t.Fatalf("query failed: %v", err)
 		}
@@ -254,7 +254,7 @@ func TestMinTTL(t *testing.T) {
 	r.Response.Answer = append(r.Response.Answer,
 		mustNewRR(t, "cdn.test. 600 A 1.2.3.4"))
 	req = newQuery("test2.", dns.TypeA)
-	for i := 0; i < 2; i++ {
+	for range 2 {
 		resp, err := c.Query(req, tr)
 		if err != nil {
 			t.Fatalf("query failed: %v", err)
@@ -274,7 +274,7 @@ func TestMinTTL(t *testing.T) {
 	resetStats()
 	r.Response = newReply(mustNewRR(t, "test3. 2147483648 A 1.2.3.4"))
 	req = newQuery("test3.", dns.TypeA)
-	for i := 0; i < 2; i++ {
+	for range 2 {
 		if _, err := c.Query(req, tr); err != nil {
 			t.Fatalf("query failed: %v", err)
 		}
@@ -390,7 +390,7 @@ func TestWantToCache(t *testing.T) {
 
 	r = reply.Copy()
 	r.Answer = nil
-	for i := 0; i < 300; i++ {
+	for range 300 {
 		r.Answer = append(r.Answer, mustNewRR(t, "test. A 1.2.3.4"))
 	}
 	checkWantToCache(t, q, r, "answer too large")
@@ -447,7 +447,7 @@ func TestZeroSize(t *testing.T) {
 	r.Response = newReply(mustNewRR(t, "test. A 1.2.3.4"))
 
 	// Do 5 different requests.
-	for i := 0; i < 5; i++ {
+	for i := range 5 {
 		queryA(t, c, "", fmt.Sprintf("test%d.", i), "1.2.3.4")
 		if !statsEquals(i+1, 0, i+1) {
 			t.Errorf("bad stats: %v", dumpStats())
@@ -456,7 +456,7 @@ func TestZeroSize(t *testing.T) {
 
 	// Query them back, they should all be misses.
 	resetStats()
-	for i := 0; i < 5; i++ {
+	for i := range 5 {
 		queryA(t, c, "", fmt.Sprintf("test%d.", i), "1.2.3.4")
 		if !statsEquals(i+1, 0, i+1) {
 			t.Errorf("bad stats: %v", dumpStats())
diff --git a/internal/dnsserver/domainmap.go b/internal/dnsserver/domainmap.go
index b4212d3..ddca8ce 100644
--- a/internal/dnsserver/domainmap.go
+++ b/internal/dnsserver/domainmap.go
@@ -51,7 +51,7 @@ func (m DomainMap) GetMostSpecific(domain string) (string, bool) {
 // {"domain1": "addr1", "domain2": "addr2", ...}.
 func DomainMapFromString(s string) (DomainMap, error) {
 	m := DomainMap{}
-	for _, pair := range strings.Split(s, ",") {
+	for pair := range strings.SplitSeq(s, ",") {
 		pair = strings.TrimSpace(pair)
 		if pair == "" {
 			continue
diff --git a/internal/dnsserver/server.go b/internal/dnsserver/server.go
index bda16b9..2f26de2 100644
--- a/internal/dnsserver/server.go
+++ b/internal/dnsserver/server.go
@@ -181,19 +181,15 @@ func (s *Server) classicServe() {
 	log.Infof("DNS listening on %s", s.Addr)
 
 	var wg sync.WaitGroup
-	wg.Add(1)
-	go func() {
-		defer wg.Done()
+	wg.Go(func() {
 		err := dns.ListenAndServe(s.Addr, "udp", dns.HandlerFunc(s.Handler))
 		log.Fatalf("Exiting UDP: %v", err)
-	}()
+	})
 
-	wg.Add(1)
-	go func() {
-		defer wg.Done()
+	wg.Go(func() {
 		err := dns.ListenAndServe(s.Addr, "tcp", dns.HandlerFunc(s.Handler))
 		log.Fatalf("Exiting TCP: %v", err)
-	}()
+	})
 
 	wg.Wait()
 }
diff --git a/internal/httpresolver/resolver_test.go b/internal/httpresolver/resolver_test.go
index 276fa61..410250b 100644
--- a/internal/httpresolver/resolver_test.go
+++ b/internal/httpresolver/resolver_test.go
@@ -135,7 +135,7 @@ func TestNoBody(t *testing.T) {
 			w.Header().Set("Content-Type", "application/dns-message")
 			// Write some data so it gets flushed to the client before
 			// abruptly closing the connection.
-			for i := 0; i < 2000; i++ {
+			for range 2000 {
 				fmt.Fprintf(w, "some response\n")
 			}
 			defer ts.CloseClientConnections()
diff --git a/internal/nettrace/bench_test.go b/internal/nettrace/bench_test.go
index a58fdbb..9fd1f81 100644
--- a/internal/nettrace/bench_test.go
+++ b/internal/nettrace/bench_test.go
@@ -9,9 +9,9 @@ import (
 func runBench(b *testing.B, events int) {
 	nTraces := (b.N + events + 1) / events
 
-	for i := 0; i < nTraces; i++ {
+	for range nTraces {
 		tr := New("bench", "test")
-		for j := 0; j < events; j++ {
+		for j := range events {
 			tr.Printf("%d", j)
 		}
 		tr.Finish()
diff --git a/internal/nettrace/histogram.go b/internal/nettrace/histogram.go
index 662a887..8d78958 100644
--- a/internal/nettrace/histogram.go
+++ b/internal/nettrace/histogram.go
@@ -53,7 +53,7 @@ func (h *histogram) Snapshot() *histSnapshot {
 	}
 
 	var cumCount uint64
-	for i := 0; i < nBuckets; i++ {
+	for i := range nBuckets {
 		cumCount += h.count[i]
 		l := line{
 			Start:     buckets[i],
diff --git a/internal/nettrace/http_test.go b/internal/nettrace/http_test.go
index 24c82f6..4664179 100644
--- a/internal/nettrace/http_test.go
+++ b/internal/nettrace/http_test.go
@@ -141,7 +141,7 @@ func TestHTTP(t *testing.T) {
 func TestHTTPLong(t *testing.T) {
 	// Test a long trace.
 	tr := New("TestHTTPLong", "verbose")
-	for i := 0; i < 1000; i++ {
+	for i := range 1000 {
 		tr.Printf("entry #%d", i)
 	}
 	tr.Finish()
diff --git a/internal/nettrace/trace.go b/internal/nettrace/trace.go
index 1c4f739..e9963ff 100644
--- a/internal/nettrace/trace.go
+++ b/internal/nettrace/trace.go
@@ -5,6 +5,7 @@ package nettrace
 import (
 	"container/ring"
 	"fmt"
+	"maps"
 	"math/rand"
 	"sort"
 	"strconv"
@@ -51,11 +52,11 @@ type Trace interface {
 	SetError()
 
 	// Printf adds a message to the trace.
-	Printf(format string, a ...interface{})
+	Printf(format string, a ...any)
 
 	// Errorf adds a message to the trace, marks it as an error, and returns
 	// an error for it.
-	Errorf(format string, a ...interface{}) error
+	Errorf(format string, a ...any) error
 
 	// Finish marks the trace as complete.
 	// The trace should not be used after calling this method.
@@ -220,7 +221,7 @@ func (tr *trace) SetError() {
 	tr.mu.Unlock()
 }
 
-func (tr *trace) Printf(format string, a ...interface{}) {
+func (tr *trace) Printf(format string, a ...any) {
 	evt := &event{
 		When: time.Now(),
 		Type: evtLOG,
@@ -230,7 +231,7 @@ func (tr *trace) Printf(format string, a ...interface{}) {
 	tr.append(evt)
 }
 
-func (tr *trace) Errorf(format string, a ...interface{}) error {
+func (tr *trace) Errorf(format string, a ...any) error {
 	tr.SetError()
 	err := fmt.Errorf(format, a...)
 	tr.Printf("%s", err.Error())
@@ -354,7 +355,7 @@ func (r *traceRing) Len() int {
 }
 
 func (r *traceRing) Do(f func(tr *trace)) {
-	r.ring.Do(func(x interface{}) {
+	r.ring.Do(func(x any) {
 		if x == nil {
 			return
 		}
@@ -382,7 +383,7 @@ type familyTraces struct {
 func newFamilyTraces() *familyTraces {
 	ft := &familyTraces{}
 	ft.active = map[id]*trace{}
-	for i := 0; i < nBuckets; i++ {
+	for i := range nBuckets {
 		ft.finished[i] = newTraceRing(tracesInBucket)
 	}
 	ft.errors = newTraceRing(tracesInBucket)
@@ -512,9 +513,7 @@ func copyFamilies() map[string]*familyTraces {
 	n := map[string]*familyTraces{}
 
 	familiesMu.Lock()
-	for f, trs := range families {
-		n[f] = trs
-	}
+	maps.Copy(n, families)
 	familiesMu.Unlock()
 
 	return n
diff --git a/internal/nettrace/trace_test.go b/internal/nettrace/trace_test.go
index ebdb5c5..34d0d85 100644
--- a/internal/nettrace/trace_test.go
+++ b/internal/nettrace/trace_test.go
@@ -37,13 +37,13 @@ func TestLong(t *testing.T) {
 	tr.SetMaxEvents(100)
 
 	// First 90 events, no drop.
-	for i := 0; i < 90; i++ {
+	for i := range 90 {
 		tr.Printf("evt %d", i)
 	}
 	expectEvents(t, tr, 90)
 
 	// Up to 99, still no drop.
-	for i := 0; i < 9; i++ {
+	for i := range 9 {
 		tr.Printf("evt %d", i)
 	}
 	expectEvents(t, tr, 99)
@@ -57,7 +57,7 @@ func TestLong(t *testing.T) {
 	expectEvents(t, tr, 101)
 
 	// Add more events, expect none of them to exceed 101.
-	for i := 0; i < 9; i++ {
+	for i := range 9 {
 		tr.Printf("evt %d", i)
 		expectEvents(t, tr, 101)
 	}
diff --git a/internal/testutil/testutil.go b/internal/testutil/testutil.go
index 11c2ca6..1cbde18 100644
--- a/internal/testutil/testutil.go
+++ b/internal/testutil/testutil.go
@@ -175,7 +175,7 @@ var LargeAnswerName = strings.Repeat(strings.Repeat("x", 62)+".", 4)
 // the 64 KiB DNS limit), but only ~5 KiB compressed.
 func NewLargeAnswer(n int) []dns.RR {
 	rrs := []dns.RR{}
-	for i := 0; i < n; i++ {
+	for i := range n {
 		rrs = append(rrs, &dns.A{
 			Hdr: dns.RR_Header{
 				Name:   LargeAnswerName,
diff --git a/internal/trace/trace.go b/internal/trace/trace.go
index 5186894..2eb3ef4 100644
--- a/internal/trace/trace.go
+++ b/internal/trace/trace.go
@@ -31,11 +31,11 @@ func New(family, title string) *Trace {
 }
 
 // Printf adds this message to the trace's log.
-func (t *Trace) Printf(format string, a ...interface{}) {
+func (t *Trace) Printf(format string, a ...any) {
 	t.t.Printf(format, a...)
 }
 
-func (t *Trace) lprintf(n int, format string, a ...interface{}) {
+func (t *Trace) lprintf(n int, format string, a ...any) {
 	t.t.Printf(format, a...)
 
 	// If -v=3, also log to the main log.
@@ -46,7 +46,7 @@ func (t *Trace) lprintf(n int, format string, a ...interface{}) {
 }
 
 // Errorf adds this message to the trace's log, with an error level.
-func (t *Trace) Errorf(format string, a ...interface{}) error {
+func (t *Trace) Errorf(format string, a ...any) error {
 	// Note we can't just call t.Error here, as it breaks caller logging.
 	err := fmt.Errorf(format, a...)
 	t.t.SetError()