diff --git a/cloud/bmaas/scruffy/bmdb_stats_test.go b/cloud/bmaas/scruffy/bmdb_stats_test.go
index 89d5b5e..0d0f199 100644
--- a/cloud/bmaas/scruffy/bmdb_stats_test.go
+++ b/cloud/bmaas/scruffy/bmdb_stats_test.go
@@ -68,7 +68,7 @@
 				}
 			}
 		}
-		for mf, _ := range wantValues {
+		for mf := range wantValues {
 			if !gotValues[mf] {
 				t.Errorf("MetricFamily %s: missing", mf)
 			}
diff --git a/go/net/tinylb/connection_pool.go b/go/net/tinylb/connection_pool.go
index 956bf75..405dd1d 100644
--- a/go/net/tinylb/connection_pool.go
+++ b/go/net/tinylb/connection_pool.go
@@ -113,7 +113,7 @@
 	defer c.mu.Unlock()
 
 	res := make([]string, 0, len(c.idsByTarget))
-	for target, _ := range c.idsByTarget {
+	for target := range c.idsByTarget {
 		res = append(res, target)
 	}
 	sort.Strings(res)
diff --git a/metropolis/build/gotoolwrap/main.go b/metropolis/build/gotoolwrap/main.go
index 86dc3a1..3c871c1 100644
--- a/metropolis/build/gotoolwrap/main.go
+++ b/metropolis/build/gotoolwrap/main.go
@@ -94,7 +94,7 @@
 		msg := "no files"
 		if len(binFiles) > 0 {
 			var names []string
-			for name, _ := range binFiles {
+			for name := range binFiles {
 				names = append(names, fmt.Sprintf("%q", name))
 			}
 			msg = fmt.Sprintf(": %s", strings.Join(names, ", "))
diff --git a/metropolis/node/core/cluster/cluster_register.go b/metropolis/node/core/cluster/cluster_register.go
index 1bda9a9..90d48f4 100644
--- a/metropolis/node/core/cluster/cluster_register.go
+++ b/metropolis/node/core/cluster/cluster_register.go
@@ -65,7 +65,7 @@
 	// been included, as it can't be relied on beyond providing cluster endpoint
 	// addresses, considering its untrusted origin (ESP). This explicitly enforces
 	// suggested usage described in ClusterDirectory's protofile.
-	for i, _ := range register.ClusterDirectory.Nodes {
+	for i := range register.ClusterDirectory.Nodes {
 		register.ClusterDirectory.Nodes[i].PublicKey = nil
 	}
 
diff --git a/metropolis/node/core/clusternet/clusternet_test.go b/metropolis/node/core/clusternet/clusternet_test.go
index b92cfb2..7089cc7 100644
--- a/metropolis/node/core/clusternet/clusternet_test.go
+++ b/metropolis/node/core/clusternet/clusternet_test.go
@@ -137,7 +137,7 @@
 				return fmt.Errorf("node %q prefixes mismatch: %v in programmed peers, %v wanted", nid, p2, p)
 			}
 		}
-		for nid, _ := range wg.nodes {
+		for nid := range wg.nodes {
 			if _, ok := nodes[nid]; !ok {
 				return fmt.Errorf("node %q present in programmed peers", nid)
 			}
diff --git a/metropolis/node/core/consensus/logparser.go b/metropolis/node/core/consensus/logparser.go
index f4f5a4f..c54968c 100644
--- a/metropolis/node/core/consensus/logparser.go
+++ b/metropolis/node/core/consensus/logparser.go
@@ -91,7 +91,7 @@
 
 	// Sort extra keys alphabetically.
 	extraKeys := make([]string, 0, len(e.Extras))
-	for k, _ := range e.Extras {
+	for k := range e.Extras {
 		extraKeys = append(extraKeys, k)
 	}
 	sort.Strings(extraKeys)
diff --git a/metropolis/node/core/network/hostsfile/hostsfile.go b/metropolis/node/core/network/hostsfile/hostsfile.go
index 1bf0c53..132f71c 100644
--- a/metropolis/node/core/network/hostsfile/hostsfile.go
+++ b/metropolis/node/core/network/hostsfile/hostsfile.go
@@ -97,7 +97,7 @@
 // pointing to 127.0.0.1 and ::1 will also be generated.
 func (m nodeMap) hosts(ctx context.Context) []byte {
 	var nodeIdsSorted []string
-	for k, _ := range m {
+	for k := range m {
 		nodeIdsSorted = append(nodeIdsSorted, k)
 	}
 	sort.Slice(nodeIdsSorted, func(i, j int) bool {
diff --git a/metropolis/node/core/rpc/peerinfo.go b/metropolis/node/core/rpc/peerinfo.go
index 9e9476d..6a8443b 100644
--- a/metropolis/node/core/rpc/peerinfo.go
+++ b/metropolis/node/core/rpc/peerinfo.go
@@ -20,7 +20,7 @@
 func (p Permissions) String() string {
 	var res []string
 
-	for k, _ := range p {
+	for k := range p {
 		res = append(res, k.String())
 	}
 
diff --git a/metropolis/node/core/rpc/resolver/processor.go b/metropolis/node/core/rpc/resolver/processor.go
index 40174bf..ad29021 100644
--- a/metropolis/node/core/rpc/resolver/processor.go
+++ b/metropolis/node/core/rpc/resolver/processor.go
@@ -166,12 +166,12 @@
 				}
 			}
 			toDelete := make(map[string]bool)
-			for nid, _ := range curMap.curators {
+			for nid := range curMap.curators {
 				if req.nu.nodes[nid] == nil {
 					toDelete[nid] = true
 				}
 			}
-			for nid, _ := range toDelete {
+			for nid := range toDelete {
 				delete(curMap.curators, nid)
 			}
 		case req.sa != nil:
@@ -284,7 +284,7 @@
 // received by the curator updater, and the seeds provided by the user.
 func (m *curatorMap) candidates() []string {
 	resMap := make(map[string]bool)
-	for ep, _ := range m.seeds {
+	for ep := range m.seeds {
 		resMap[ep] = true
 	}
 	for nid, v := range m.curators {
@@ -295,7 +295,7 @@
 		}
 	}
 	var res []string
-	for ep, _ := range resMap {
+	for ep := range resMap {
 		res = append(res, ep)
 	}
 	sort.Strings(res)
diff --git a/metropolis/node/core/rpc/resolver/resolver.go b/metropolis/node/core/rpc/resolver/resolver.go
index 2e1fc99..4e79bae 100644
--- a/metropolis/node/core/rpc/resolver/resolver.go
+++ b/metropolis/node/core/rpc/resolver/resolver.go
@@ -281,7 +281,7 @@
 		for k, v := range dbg.curmap.curators {
 			msg = append(msg, fmt.Sprintf("curator: %s/%s", k, v.endpoint))
 		}
-		for k, _ := range dbg.curmap.seeds {
+		for k := range dbg.curmap.seeds {
 			msg = append(msg, fmt.Sprintf("seed: %s", k))
 		}
 		if dbg.leader != nil {
diff --git a/metropolis/node/kubernetes/reconciler/reconciler.go b/metropolis/node/kubernetes/reconciler/reconciler.go
index 4ed4859..13b71cf 100644
--- a/metropolis/node/kubernetes/reconciler/reconciler.go
+++ b/metropolis/node/kubernetes/reconciler/reconciler.go
@@ -176,7 +176,7 @@
 			}
 		}
 	}
-	for name, _ := range presentMap {
+	for name := range presentMap {
 		if _, ok := expectedMap[name]; !ok {
 			if err := r.Delete(ctx, name); err != nil {
 				return err
diff --git a/metropolis/pkg/logbuffer/linebuffer_test.go b/metropolis/pkg/logbuffer/linebuffer_test.go
index c821a4b..699c3dc 100644
--- a/metropolis/pkg/logbuffer/linebuffer_test.go
+++ b/metropolis/pkg/logbuffer/linebuffer_test.go
@@ -32,7 +32,7 @@
 		if len(a) != len(b) {
 			return msg
 		}
-		for i, _ := range a {
+		for i := range a {
 			if a[i].String() != b[i] {
 				return msg
 			}
diff --git a/metropolis/pkg/supervisor/supervisor_node.go b/metropolis/pkg/supervisor/supervisor_node.go
index 4fb2ddb..76d656c 100644
--- a/metropolis/pkg/supervisor/supervisor_node.go
+++ b/metropolis/pkg/supervisor/supervisor_node.go
@@ -242,7 +242,7 @@
 	}
 
 	// Check the requested runnable names.
-	for name, _ := range runnables {
+	for name := range runnables {
 		if !reNodeName.MatchString(name) {
 			return fmt.Errorf("runnable name %q is invalid", name)
 		}
@@ -272,7 +272,7 @@
 
 	// Schedule execution of group members.
 	go func() {
-		for name, _ := range runnables {
+		for name := range runnables {
 			n.sup.pReq <- &processorRequest{
 				schedule: &processorRequestSchedule{
 					dn: dns[name],
diff --git a/metropolis/pkg/supervisor/supervisor_processor.go b/metropolis/pkg/supervisor/supervisor_processor.go
index 8b5b336..816298d 100644
--- a/metropolis/pkg/supervisor/supervisor_processor.go
+++ b/metropolis/pkg/supervisor/supervisor_processor.go
@@ -309,7 +309,7 @@
 
 	// Cancel all siblings.
 	if n.parent != nil {
-		for name, _ := range n.parent.groupSiblings(n.name) {
+		for name := range n.parent.groupSiblings(n.name) {
 			if name == n.name {
 				continue
 			}
@@ -374,7 +374,7 @@
 
 	// We build a queue of nodes to visit, starting from the leaves.
 	queue = []*node{}
-	for l, _ := range leaves {
+	for l := range leaves {
 		queue = append(queue, s.nodeByDN(l))
 	}
 
@@ -493,7 +493,7 @@
 	}
 
 	// Reinitialize and reschedule all subtrees
-	for dn, _ := range can {
+	for dn := range can {
 		n := s.nodeByDN(dn)
 
 		// Only back off when the node unexpectedly died - not when it got
