all: use Go 1.21 slices, maps instead of x/exp/{slices,maps}

Updates #8419

Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
pull/8925/head
Brad Fitzpatrick 9 months ago committed by Brad Fitzpatrick
parent e8d140654a
commit e8551d6b40

@ -168,9 +168,6 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa
golang.org/x/crypto/nacl/box from tailscale.com/types/key golang.org/x/crypto/nacl/box from tailscale.com/types/key
golang.org/x/crypto/nacl/secretbox from golang.org/x/crypto/nacl/box golang.org/x/crypto/nacl/secretbox from golang.org/x/crypto/nacl/box
golang.org/x/crypto/salsa20/salsa from golang.org/x/crypto/nacl/box+ golang.org/x/crypto/salsa20/salsa from golang.org/x/crypto/nacl/box+
golang.org/x/exp/constraints from golang.org/x/exp/slices
golang.org/x/exp/maps from tailscale.com/types/views+
golang.org/x/exp/slices from tailscale.com/net/tsaddr+
L golang.org/x/net/bpf from github.com/mdlayher/netlink+ L golang.org/x/net/bpf from github.com/mdlayher/netlink+
golang.org/x/net/dns/dnsmessage from net+ golang.org/x/net/dns/dnsmessage from net+
golang.org/x/net/http/httpguts from net/http golang.org/x/net/http/httpguts from net/http
@ -193,6 +190,7 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa
golang.org/x/time/rate from tailscale.com/cmd/derper+ golang.org/x/time/rate from tailscale.com/cmd/derper+
bufio from compress/flate+ bufio from compress/flate+
bytes from bufio+ bytes from bufio+
cmp from slices
compress/flate from compress/gzip+ compress/flate from compress/gzip+
compress/gzip from internal/profile+ compress/gzip from internal/profile+
container/list from crypto/tls+ container/list from crypto/tls+
@ -242,6 +240,7 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa
io/ioutil from github.com/mitchellh/go-ps+ io/ioutil from github.com/mitchellh/go-ps+
log from expvar+ log from expvar+
log/internal from log log/internal from log
maps from tailscale.com/types/views
math from compress/flate+ math from compress/flate+
math/big from crypto/dsa+ math/big from crypto/dsa+
math/bits from compress/flate+ math/bits from compress/flate+
@ -269,6 +268,7 @@ tailscale.com/cmd/derper dependencies: (generated by github.com/tailscale/depawa
runtime/metrics from github.com/prometheus/client_golang/prometheus+ runtime/metrics from github.com/prometheus/client_golang/prometheus+
runtime/pprof from net/http/pprof runtime/pprof from net/http/pprof
runtime/trace from net/http/pprof runtime/trace from net/http/pprof
slices from tailscale.com/ipn+
sort from compress/flate+ sort from compress/flate+
strconv from compress/flate+ strconv from compress/flate+
strings from bufio+ strings from bufio+

@ -12,13 +12,13 @@ import (
"fmt" "fmt"
"net/http" "net/http"
"os" "os"
"slices"
"strings" "strings"
"time" "time"
"github.com/go-logr/zapr" "github.com/go-logr/zapr"
"go.uber.org/zap" "go.uber.org/zap"
"go.uber.org/zap/zapcore" "go.uber.org/zap/zapcore"
"golang.org/x/exp/slices"
"golang.org/x/oauth2/clientcredentials" "golang.org/x/oauth2/clientcredentials"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1" corev1 "k8s.io/api/core/v1"

@ -35,14 +35,13 @@ import (
"net/http" "net/http"
"net/netip" "net/netip"
"os" "os"
"slices"
"strconv" "strconv"
"strings" "strings"
"time" "time"
"github.com/dsnet/try" "github.com/dsnet/try"
jsonv2 "github.com/go-json-experiment/json" jsonv2 "github.com/go-json-experiment/json"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
"tailscale.com/types/logid" "tailscale.com/types/logid"
"tailscale.com/types/netlogtype" "tailscale.com/types/netlogtype"
"tailscale.com/util/cmpx" "tailscale.com/util/cmpx"
@ -315,8 +314,8 @@ func mustMakeNamesByAddr() map[netip.Addr]string {
namesByAddr := make(map[netip.Addr]string) namesByAddr := make(map[netip.Addr]string)
retry: retry:
for i := 0; i < 10; i++ { for i := 0; i < 10; i++ {
maps.Clear(seen) clear(seen)
maps.Clear(namesByAddr) clear(namesByAddr)
for _, d := range m.Devices { for _, d := range m.Devices {
name := fieldPrefix(d.Name, i) name := fieldPrefix(d.Name, i)
if seen[name] { if seen[name] {

@ -14,12 +14,12 @@ import (
"log" "log"
"os" "os"
"runtime" "runtime"
"slices"
"strings" "strings"
"sync" "sync"
"text/tabwriter" "text/tabwriter"
"github.com/peterbourgon/ff/v3/ffcli" "github.com/peterbourgon/ff/v3/ffcli"
"golang.org/x/exp/slices"
"tailscale.com/client/tailscale" "tailscale.com/client/tailscale"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/paths" "tailscale.com/paths"

@ -11,10 +11,10 @@ import (
"fmt" "fmt"
"os" "os"
"path/filepath" "path/filepath"
"slices"
"strings" "strings"
"github.com/peterbourgon/ff/v3/ffcli" "github.com/peterbourgon/ff/v3/ffcli"
"golang.org/x/exp/slices"
"k8s.io/client-go/util/homedir" "k8s.io/client-go/util/homedir"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
"tailscale.com/version" "tailscale.com/version"

@ -8,14 +8,13 @@ import (
"errors" "errors"
"flag" "flag"
"fmt" "fmt"
"os" "os"
"slices"
"strings" "strings"
"text/tabwriter" "text/tabwriter"
"github.com/peterbourgon/ff/v3/ffcli" "github.com/peterbourgon/ff/v3/ffcli"
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
"golang.org/x/exp/slices"
"tailscale.com/ipn/ipnstate" "tailscale.com/ipn/ipnstate"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
"tailscale.com/util/cmpx" "tailscale.com/util/cmpx"

@ -9,11 +9,11 @@ import (
"fmt" "fmt"
"net" "net"
"os" "os"
"slices"
"strconv" "strconv"
"strings" "strings"
"github.com/peterbourgon/ff/v3/ffcli" "github.com/peterbourgon/ff/v3/ffcli"
"golang.org/x/exp/slices"
"tailscale.com/ipn" "tailscale.com/ipn"
"tailscale.com/ipn/ipnstate" "tailscale.com/ipn/ipnstate"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"

@ -18,12 +18,12 @@ import (
"path/filepath" "path/filepath"
"reflect" "reflect"
"runtime" "runtime"
"slices"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
"github.com/peterbourgon/ff/v3/ffcli" "github.com/peterbourgon/ff/v3/ffcli"
"golang.org/x/exp/slices"
"tailscale.com/client/tailscale" "tailscale.com/client/tailscale"
"tailscale.com/ipn" "tailscale.com/ipn"
"tailscale.com/ipn/ipnstate" "tailscale.com/ipn/ipnstate"

@ -168,9 +168,8 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
golang.org/x/crypto/nacl/secretbox from golang.org/x/crypto/nacl/box golang.org/x/crypto/nacl/secretbox from golang.org/x/crypto/nacl/box
golang.org/x/crypto/pbkdf2 from software.sslmate.com/src/go-pkcs12 golang.org/x/crypto/pbkdf2 from software.sslmate.com/src/go-pkcs12
golang.org/x/crypto/salsa20/salsa from golang.org/x/crypto/nacl/box+ golang.org/x/crypto/salsa20/salsa from golang.org/x/crypto/nacl/box+
golang.org/x/exp/constraints from golang.org/x/exp/slices+ W golang.org/x/exp/constraints from github.com/dblohm7/wingoes/pe
golang.org/x/exp/maps from tailscale.com/types/views+ golang.org/x/exp/maps from tailscale.com/cmd/tailscale/cli
golang.org/x/exp/slices from tailscale.com/net/tsaddr+
golang.org/x/net/bpf from github.com/mdlayher/netlink+ golang.org/x/net/bpf from github.com/mdlayher/netlink+
golang.org/x/net/dns/dnsmessage from net+ golang.org/x/net/dns/dnsmessage from net+
golang.org/x/net/http/httpguts from net/http+ golang.org/x/net/http/httpguts from net/http+
@ -199,6 +198,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
golang.org/x/time/rate from tailscale.com/cmd/tailscale/cli+ golang.org/x/time/rate from tailscale.com/cmd/tailscale/cli+
bufio from compress/flate+ bufio from compress/flate+
bytes from bufio+ bytes from bufio+
cmp from slices
compress/flate from compress/gzip+ compress/flate from compress/gzip+
compress/gzip from net/http compress/gzip from net/http
compress/zlib from image/png+ compress/zlib from image/png+
@ -256,6 +256,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
io/ioutil from golang.org/x/sys/cpu+ io/ioutil from golang.org/x/sys/cpu+
log from expvar+ log from expvar+
log/internal from log log/internal from log
maps from tailscale.com/types/views
math from compress/flate+ math from compress/flate+
math/big from crypto/dsa+ math/big from crypto/dsa+
math/bits from compress/flate+ math/bits from compress/flate+
@ -282,6 +283,7 @@ tailscale.com/cmd/tailscale dependencies: (generated by github.com/tailscale/dep
regexp from github.com/tailscale/goupnp/httpu+ regexp from github.com/tailscale/goupnp/httpu+
regexp/syntax from regexp regexp/syntax from regexp
runtime/debug from tailscale.com/util/singleflight+ runtime/debug from tailscale.com/util/singleflight+
slices from tailscale.com/cmd/tailscale/cli+
sort from compress/flate+ sort from compress/flate+
strconv from compress/flate+ strconv from compress/flate+
strings from bufio+ strings from bufio+

@ -379,9 +379,8 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
golang.org/x/crypto/poly1305 from github.com/tailscale/golang-x-crypto/ssh+ golang.org/x/crypto/poly1305 from github.com/tailscale/golang-x-crypto/ssh+
golang.org/x/crypto/salsa20/salsa from golang.org/x/crypto/nacl/box+ golang.org/x/crypto/salsa20/salsa from golang.org/x/crypto/nacl/box+
LD golang.org/x/crypto/ssh from tailscale.com/ssh/tailssh+ LD golang.org/x/crypto/ssh from tailscale.com/ssh/tailssh+
golang.org/x/exp/constraints from golang.org/x/exp/slices+ golang.org/x/exp/constraints from github.com/dblohm7/wingoes/pe+
golang.org/x/exp/maps from tailscale.com/wgengine+ golang.org/x/exp/maps from tailscale.com/wgengine/magicsock
golang.org/x/exp/slices from tailscale.com/ipn/ipnlocal+
golang.org/x/net/bpf from github.com/mdlayher/genetlink+ golang.org/x/net/bpf from github.com/mdlayher/genetlink+
golang.org/x/net/dns/dnsmessage from net+ golang.org/x/net/dns/dnsmessage from net+
golang.org/x/net/http/httpguts from golang.org/x/net/http2+ golang.org/x/net/http/httpguts from golang.org/x/net/http2+
@ -467,6 +466,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
log from expvar+ log from expvar+
log/internal from log log/internal from log
LD log/syslog from tailscale.com/ssh/tailssh LD log/syslog from tailscale.com/ssh/tailssh
maps from tailscale.com/types/views
math from compress/flate+ math from compress/flate+
math/big from crypto/dsa+ math/big from crypto/dsa+
math/bits from compress/flate+ math/bits from compress/flate+
@ -496,7 +496,7 @@ tailscale.com/cmd/tailscaled dependencies: (generated by github.com/tailscale/de
runtime/debug from github.com/klauspost/compress/zstd+ runtime/debug from github.com/klauspost/compress/zstd+
runtime/pprof from net/http/pprof+ runtime/pprof from net/http/pprof+
runtime/trace from net/http/pprof runtime/trace from net/http/pprof
slices from tailscale.com/wgengine/magicsock slices from tailscale.com/wgengine/magicsock+
sort from compress/flate+ sort from compress/flate+
strconv from compress/flate+ strconv from compress/flate+
strings from bufio+ strings from bufio+

@ -12,11 +12,11 @@ import (
"path" "path"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"strconv" "strconv"
"time" "time"
esbuild "github.com/evanw/esbuild/pkg/api" esbuild "github.com/evanw/esbuild/pkg/api"
"golang.org/x/exp/slices"
) )
const ( const (

@ -6,9 +6,9 @@
package logknob package logknob
import ( import (
"slices"
"sync/atomic" "sync/atomic"
"golang.org/x/exp/slices"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/types/logger" "tailscale.com/types/logger"
) )

@ -27,12 +27,12 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"strings" "strings"
"sync" "sync"
"time" "time"
"github.com/tailscale/golang-x-crypto/acme" "github.com/tailscale/golang-x-crypto/acme"
"golang.org/x/exp/slices"
"tailscale.com/atomicfile" "tailscale.com/atomicfile"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/hostinfo" "tailscale.com/hostinfo"

@ -18,7 +18,6 @@ import (
"time" "time"
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"golang.org/x/exp/maps"
"tailscale.com/ipn/store/mem" "tailscale.com/ipn/store/mem"
) )
@ -112,7 +111,7 @@ func TestShouldStartDomainRenewal(t *testing.T) {
reset := func() { reset := func() {
renewMu.Lock() renewMu.Lock()
defer renewMu.Unlock() defer renewMu.Unlock()
maps.Clear(renewCertAt) clear(renewCertAt)
} }
mustMakePair := func(template *x509.Certificate) *TLSCertKeyPair { mustMakePair := func(template *x509.Certificate) *TLSCertKeyPair {

@ -20,6 +20,7 @@ import (
"os/user" "os/user"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@ -29,7 +30,6 @@ import (
"go4.org/mem" "go4.org/mem"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/slices"
"gvisor.dev/gvisor/pkg/tcpip" "gvisor.dev/gvisor/pkg/tcpip"
"tailscale.com/client/tailscale/apitype" "tailscale.com/client/tailscale/apitype"
"tailscale.com/control/controlclient" "tailscale.com/control/controlclient"

@ -22,6 +22,7 @@ import (
"path" "path"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@ -32,7 +33,6 @@ import (
"unicode/utf8" "unicode/utf8"
"github.com/kortschak/wol" "github.com/kortschak/wol"
"golang.org/x/exp/slices"
"golang.org/x/net/dns/dnsmessage" "golang.org/x/net/dns/dnsmessage"
"golang.org/x/net/http/httpguts" "golang.org/x/net/http/httpguts"
"tailscale.com/client/tailscale/apitype" "tailscale.com/client/tailscale/apitype"

@ -10,10 +10,10 @@ import (
"math/rand" "math/rand"
"net/netip" "net/netip"
"runtime" "runtime"
"slices"
"strings" "strings"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/ipn" "tailscale.com/ipn"
"tailscale.com/types/logger" "tailscale.com/types/logger"

@ -17,12 +17,12 @@ import (
"net/url" "net/url"
"os" "os"
"path" "path"
"slices"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/ipn" "tailscale.com/ipn"
"tailscale.com/logtail/backoff" "tailscale.com/logtail/backoff"
"tailscale.com/net/netutil" "tailscale.com/net/netutil"

@ -20,12 +20,12 @@ import (
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"strings" "strings"
"sync" "sync"
"github.com/tailscale/golang-x-crypto/ssh" "github.com/tailscale/golang-x-crypto/ssh"
"go4.org/mem" "go4.org/mem"
"golang.org/x/exp/slices"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
"tailscale.com/util/lineread" "tailscale.com/util/lineread"
"tailscale.com/util/mak" "tailscale.com/util/mak"

@ -20,12 +20,12 @@ import (
"net/netip" "net/netip"
"net/url" "net/url"
"runtime" "runtime"
"slices"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/client/tailscale/apitype" "tailscale.com/client/tailscale/apitype"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/health" "tailscale.com/health"

@ -9,10 +9,10 @@ import (
"net" "net"
"net/netip" "net/netip"
"net/url" "net/url"
"slices"
"strconv" "strconv"
"strings" "strings"
"golang.org/x/exp/slices"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
) )

@ -9,9 +9,8 @@ import (
"expvar" "expvar"
"fmt" "fmt"
"io" "io"
"slices"
"strings" "strings"
"golang.org/x/exp/slices"
) )
// Set is a string-to-Var map variable that satisfies the expvar.Var // Set is a string-to-Var map variable that satisfies the expvar.Var

@ -12,11 +12,11 @@ import (
"net" "net"
"net/netip" "net/netip"
"runtime" "runtime"
"slices"
"strings" "strings"
"sync/atomic" "sync/atomic"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/health" "tailscale.com/health"
"tailscale.com/net/dns/resolver" "tailscale.com/net/dns/resolver"
"tailscale.com/net/netmon" "tailscale.com/net/netmon"

@ -10,11 +10,11 @@ import (
"fmt" "fmt"
"net" "net"
"net/netip" "net/netip"
"slices"
"strings" "strings"
"time" "time"
"github.com/miekg/dns" "github.com/miekg/dns"
"golang.org/x/exp/slices"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/net/netns" "tailscale.com/net/netns"
"tailscale.com/types/logger" "tailscale.com/types/logger"

@ -15,8 +15,9 @@ import (
"testing" "testing"
"time" "time"
"slices"
"github.com/miekg/dns" "github.com/miekg/dns"
"golang.org/x/exp/slices"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/tstest" "tailscale.com/tstest"
) )

@ -19,11 +19,11 @@ import (
"net/url" "net/url"
"os" "os"
"reflect" "reflect"
"slices"
"sync/atomic" "sync/atomic"
"time" "time"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/slices"
"tailscale.com/atomicfile" "tailscale.com/atomicfile"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/net/dns/recursive" "tailscale.com/net/dns/recursive"

@ -8,10 +8,10 @@ import (
"encoding/binary" "encoding/binary"
"errors" "errors"
"net/netip" "net/netip"
"slices"
"sync" "sync"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/slices"
"tailscale.com/net/netaddr" "tailscale.com/net/netaddr"
) )

@ -12,6 +12,7 @@ import (
"net/netip" "net/netip"
"os" "os"
"reflect" "reflect"
"slices"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
@ -20,7 +21,6 @@ import (
"github.com/tailscale/wireguard-go/device" "github.com/tailscale/wireguard-go/device"
"github.com/tailscale/wireguard-go/tun" "github.com/tailscale/wireguard-go/tun"
"go4.org/mem" "go4.org/mem"
"golang.org/x/exp/slices"
"gvisor.dev/gvisor/pkg/tcpip/stack" "gvisor.dev/gvisor/pkg/tcpip/stack"
"tailscale.com/disco" "tailscale.com/disco"
"tailscale.com/net/connstats" "tailscale.com/net/connstats"

@ -10,10 +10,10 @@ import (
"errors" "errors"
"fmt" "fmt"
"runtime" "runtime"
"slices"
"sync" "sync"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/envknob" "tailscale.com/envknob"
) )

@ -22,6 +22,7 @@ import (
"os/exec" "os/exec"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"sort" "sort"
"strconv" "strconv"
"strings" "strings"
@ -31,7 +32,6 @@ import (
"github.com/pkg/sftp" "github.com/pkg/sftp"
"github.com/u-root/u-root/pkg/termios" "github.com/u-root/u-root/pkg/termios"
gossh "golang.org/x/crypto/ssh" gossh "golang.org/x/crypto/ssh"
"golang.org/x/exp/slices"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"tailscale.com/cmd/tailscaled/childproc" "tailscale.com/cmd/tailscaled/childproc"
"tailscale.com/hostinfo" "tailscale.com/hostinfo"

@ -15,11 +15,11 @@ import (
"reflect" "reflect"
"regexp" "regexp"
"runtime" "runtime"
"slices"
"strconv" "strconv"
"syscall" "syscall"
"testing" "testing"
"golang.org/x/exp/slices"
"tailscale.com/types/logger" "tailscale.com/types/logger"
) )

@ -9,7 +9,6 @@ import (
"sync" "sync"
"sync/atomic" "sync/atomic"
"golang.org/x/exp/maps"
"tailscale.com/util/mak" "tailscale.com/util/mak"
) )
@ -232,7 +231,7 @@ func (m *Map[K, V]) Len() int {
func (m *Map[K, V]) Clear() { func (m *Map[K, V]) Clear() {
m.mu.Lock() m.mu.Lock()
defer m.mu.Unlock() defer m.mu.Unlock()
maps.Clear(m.m) clear(m.m)
} }
// WaitGroup is identical to [sync.WaitGroup], // WaitGroup is identical to [sync.WaitGroup],

@ -4,6 +4,7 @@ package ssh
import ( import (
"bytes" "bytes"
"io"
"net" "net"
"strconv" "strconv"
"strings" "strings"

@ -22,12 +22,12 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"runtime" "runtime"
"slices"
"strconv" "strconv"
"strings" "strings"
"sync" "sync"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/client/tailscale" "tailscale.com/client/tailscale"
"tailscale.com/control/controlclient" "tailscale.com/control/controlclient"
"tailscale.com/envknob" "tailscale.com/envknob"

@ -4,11 +4,11 @@
package tstest package tstest
import ( import (
"slices"
"sync/atomic" "sync/atomic"
"testing" "testing"
"time" "time"
"golang.org/x/exp/slices"
"tailscale.com/tstime" "tailscale.com/tstime"
) )

@ -19,6 +19,7 @@ import (
"net/http/httptest" "net/http/httptest"
"net/netip" "net/netip"
"net/url" "net/url"
"slices"
"sort" "sort"
"strings" "strings"
"sync" "sync"
@ -26,7 +27,6 @@ import (
"github.com/klauspost/compress/zstd" "github.com/klauspost/compress/zstd"
"go4.org/mem" "go4.org/mem"
"golang.org/x/exp/slices"
"tailscale.com/net/netaddr" "tailscale.com/net/netaddr"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
"tailscale.com/smallzstd" "tailscale.com/smallzstd"

@ -11,9 +11,8 @@ import (
"encoding/binary" "encoding/binary"
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"slices"
"unicode/utf8" "unicode/utf8"
"golang.org/x/exp/slices"
) )
// PrivateID represents a log steam for writing. // PrivateID represents a log steam for writing.

@ -8,10 +8,10 @@ package views
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"maps"
"net/netip" "net/netip"
"slices"
"golang.org/x/exp/maps"
"golang.org/x/exp/slices"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
) )

@ -7,9 +7,8 @@ package multierr
import ( import (
"errors" "errors"
"slices"
"strings" "strings"
"golang.org/x/exp/slices"
) )
// An Error represents multiple errors. // An Error represents multiple errors.

@ -4,7 +4,8 @@
package set package set
import ( import (
"golang.org/x/exp/slices" "slices"
"tailscale.com/types/views" "tailscale.com/types/views"
) )

@ -5,9 +5,8 @@ package slicesx
import ( import (
"reflect" "reflect"
"slices"
"testing" "testing"
"golang.org/x/exp/slices"
) )
func TestInterleave(t *testing.T) { func TestInterleave(t *testing.T) {

@ -7,11 +7,11 @@ package filter
import ( import (
"fmt" "fmt"
"net/netip" "net/netip"
"slices"
"sync" "sync"
"time" "time"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/slices"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/net/flowtrack" "tailscale.com/net/flowtrack"
"tailscale.com/net/netaddr" "tailscale.com/net/netaddr"

@ -7,6 +7,7 @@ import (
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"net/netip" "net/netip"
"slices"
"strconv" "strconv"
"strings" "strings"
"testing" "testing"
@ -14,7 +15,6 @@ import (
"github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/maps" "golang.org/x/exp/maps"
"golang.org/x/exp/slices"
"tailscale.com/net/packet" "tailscale.com/net/packet"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"

@ -11,13 +11,13 @@ import (
"log" "log"
"net" "net"
"net/netip" "net/netip"
"slices"
"sort" "sort"
"time" "time"
ole "github.com/go-ole/go-ole" ole "github.com/go-ole/go-ole"
"github.com/tailscale/wireguard-go/tun" "github.com/tailscale/wireguard-go/tun"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/slices"
"golang.org/x/sys/windows" "golang.org/x/sys/windows"
"golang.zx2c4.com/wireguard/windows/tunnel/winipcfg" "golang.zx2c4.com/wireguard/windows/tunnel/winipcfg"
"tailscale.com/health" "tailscale.com/health"

@ -11,6 +11,7 @@ import (
"os" "os"
"reflect" "reflect"
"regexp" "regexp"
"slices"
"sort" "sort"
"strings" "strings"
"sync" "sync"
@ -21,7 +22,6 @@ import (
"github.com/tailscale/wireguard-go/tun" "github.com/tailscale/wireguard-go/tun"
"github.com/vishvananda/netlink" "github.com/vishvananda/netlink"
"go4.org/netipx" "go4.org/netipx"
"golang.org/x/exp/slices"
"tailscale.com/net/netmon" "tailscale.com/net/netmon"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
"tailscale.com/tstest" "tailscale.com/tstest"

@ -19,7 +19,6 @@ import (
"github.com/tailscale/wireguard-go/device" "github.com/tailscale/wireguard-go/device"
"github.com/tailscale/wireguard-go/tun" "github.com/tailscale/wireguard-go/tun"
"golang.org/x/exp/maps"
"tailscale.com/control/controlclient" "tailscale.com/control/controlclient"
"tailscale.com/envknob" "tailscale.com/envknob"
"tailscale.com/health" "tailscale.com/health"
@ -619,7 +618,7 @@ func (e *userspaceEngine) maybeReconfigWireguardLocked(discoChanged map[key.Node
// Don't re-alloc the map; the Go compiler optimizes map clears as of // Don't re-alloc the map; the Go compiler optimizes map clears as of
// Go 1.11, so we can re-use the existing + allocated map. // Go 1.11, so we can re-use the existing + allocated map.
if e.trimmedNodes != nil { if e.trimmedNodes != nil {
maps.Clear(e.trimmedNodes) clear(e.trimmedNodes)
} else { } else {
e.trimmedNodes = make(map[key.NodePublic]bool) e.trimmedNodes = make(map[key.NodePublic]bool)
} }

@ -8,9 +8,9 @@ import (
"bytes" "bytes"
"fmt" "fmt"
"net/netip" "net/netip"
"slices"
"strings" "strings"
"golang.org/x/exp/slices"
"tailscale.com/net/tsaddr" "tailscale.com/net/tsaddr"
"tailscale.com/tailcfg" "tailscale.com/tailcfg"
"tailscale.com/types/logger" "tailscale.com/types/logger"

Loading…
Cancel
Save