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 {
