all: use Go 1.26 things, run most gofix modernizers

I omitted a lot of the min/max modernizers because they didn't
result in more clear code.

Some of it's older "for x := range 123".

Also: errors.AsType, any, fmt.Appendf, etc.

Updates #18682

Change-Id: I83a451577f33877f962766a5b65ce86f7696471c
Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
Brad Fitzpatrick
2026-03-05 21:13:57 +00:00
committed by Brad Fitzpatrick
parent 4453cc5f53
commit bd2a2d53d3
168 changed files with 431 additions and 618 deletions
+4 -4
View File
@@ -751,13 +751,13 @@ func ports(s string) PortRange {
}
var fs, ls string
i := strings.IndexByte(s, '-')
if i == -1 {
before, after, ok := strings.Cut(s, "-")
if !ok {
fs = s
ls = fs
} else {
fs = s[:i]
ls = s[i+1:]
fs = before
ls = after
}
first, err := strconv.ParseInt(fs, 10, 16)
if err != nil {
+1 -2
View File
@@ -1474,8 +1474,7 @@ func (c *Conn) sendUDPBatch(addr epAddr, buffs [][]byte, offset int) (sent bool,
err = c.pconn4.WriteWireGuardBatchTo(buffs, addr, offset)
}
if err != nil {
var errGSO neterror.ErrUDPGSODisabled
if errors.As(err, &errGSO) {
if errGSO, ok := errors.AsType[neterror.ErrUDPGSODisabled](err); ok {
c.logf("magicsock: %s", errGSO.Error())
err = errGSO.RetryErr
} else {
+3 -3
View File
@@ -2007,7 +2007,7 @@ func TestStressSetNetworkMap(t *testing.T) {
const iters = 1000 // approx 0.5s on an m1 mac
for range iters {
for j := 0; j < npeers; j++ {
for j := range npeers {
// Randomize which peers are present.
if prng.Int()&1 == 0 {
present[j] = !present[j]
@@ -2196,7 +2196,7 @@ func newWireguard(t *testing.T, uapi string, aips []netip.Prefix) (*device.Devic
if err != nil {
t.Fatal(err)
}
for _, line := range strings.Split(s, "\n") {
for line := range strings.SplitSeq(s, "\n") {
line = strings.TrimSpace(line)
if len(line) == 0 {
continue
@@ -4311,7 +4311,7 @@ func TestRotateDiscoKeyMultipleTimes(t *testing.T) {
keys := make([]key.DiscoPublic, 0, 5)
keys = append(keys, c.discoAtomic.Public())
for i := 0; i < 4; i++ {
for i := range 4 {
c.RotateDiscoKey()
newKey := c.discoAtomic.Public()
+1 -1
View File
@@ -102,7 +102,7 @@ var (
canonicalIPs = sync.OnceValue(func() (checkIPFunc func(netip.Addr) bool) {
// https://bgp.he.net/AS41231#_prefixes
t := &bart.Table[bool]{}
for _, s := range strings.Fields(`
for s := range strings.FieldsSeq(`
91.189.89.0/24
91.189.91.0/24
91.189.92.0/24
@@ -1073,11 +1073,9 @@ func (o *fakeOS) run(args ...string) error {
switch args[2] {
case "add":
for _, el := range *ls {
if el == rest {
o.t.Errorf("can't add %q, already present", rest)
return errors.New("already exists")
}
if slices.Contains(*ls, rest) {
o.t.Errorf("can't add %q, already present", rest)
return errors.New("already exists")
}
*ls = append(*ls, rest)
sort.Strings(*ls)
+3 -8
View File
@@ -10,6 +10,7 @@ import (
"fmt"
"os"
"os/exec"
"slices"
"strconv"
"strings"
"syscall"
@@ -42,8 +43,7 @@ func errCode(err error) int {
if err == nil {
return 0
}
var e *exec.ExitError
if ok := errors.As(err, &e); ok {
if e, ok := errors.AsType[*exec.ExitError](err); ok {
return e.ExitCode()
}
s := err.Error()
@@ -96,12 +96,7 @@ func newRunGroup(okCode []int, runner commandRunner) *runGroup {
func (rg *runGroup) okCode(err error) bool {
got := errCode(err)
for _, want := range rg.OkCode {
if got == want {
return true
}
}
return false
return slices.Contains(rg.OkCode, got)
}
func (rg *runGroup) Output(args ...string) []byte {
+2 -2
View File
@@ -19,8 +19,8 @@ func TestConfigEqual(t *testing.T) {
}
configType := reflect.TypeFor[Config]()
configFields := []string{}
for i := range configType.NumField() {
configFields = append(configFields, configType.Field(i).Name)
for field := range configType.Fields() {
configFields = append(configFields, field.Name)
}
if !reflect.DeepEqual(configFields, testedFields) {
t.Errorf("Config.Equal check might be out of sync\nfields: %q\nhandled: %q\n",
+2 -4
View File
@@ -12,8 +12,7 @@ import (
// that might get added in the future.
func TestConfigEqual(t *testing.T) {
rt := reflect.TypeFor[Config]()
for i := range rt.NumField() {
sf := rt.Field(i)
for sf := range rt.Fields() {
switch sf.Name {
case "Name", "NodeID", "PrivateKey", "MTU", "Addresses", "DNS", "Peers",
"NetworkLogging":
@@ -28,8 +27,7 @@ func TestConfigEqual(t *testing.T) {
// that might get added in the future.
func TestPeerEqual(t *testing.T) {
rt := reflect.TypeFor[Peer]()
for i := range rt.NumField() {
sf := rt.Field(i)
for sf := range rt.Fields() {
switch sf.Name {
case "PublicKey", "DiscoKey", "AllowedIPs", "IsJailed",
"PersistentKeepalive", "V4MasqAddr", "V6MasqAddr", "WGEndpoint":