Skip to content

Commit

Permalink
Update to go 1.19
Browse files Browse the repository at this point in the history
  • Loading branch information
9seconds committed Aug 9, 2022
1 parent 9d67414 commit f481568
Show file tree
Hide file tree
Showing 60 changed files with 260 additions and 260 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ jobs:
strategy:
matrix:
go_version:
- ^1.18
- ^1.19
steps:
- name: Checkout
uses: actions/checkout@v2
Expand Down Expand Up @@ -70,7 +70,7 @@ jobs:
- name: Run linter
uses: golangci/golangci-lint-action@v2
with:
version: v1.45.0
version: v1.48.0

docker:
name: Docker
Expand Down
12 changes: 11 additions & 1 deletion .golangci.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,14 @@ format = "colored-line-number"

[linters]
enable-all = true
disable = ["thelper", "ireturn", "varnamelen", "gochecknoglobals", "gas", "goerr113", "exhaustivestruct", "containedctx"]
disable = [
"containedctx",
"exhaustivestruct",
"exhaustruct",
"gas",
"gochecknoglobals",
"goerr113",
"ireturn",
"thelper",
"varnamelen",
]
2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
###############################################################################
# BUILD STAGE

FROM golang:1.18-alpine AS build
FROM golang:1.19-alpine AS build

RUN set -x \
&& apk --no-cache --update add \
Expand Down
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
IMAGE_NAME := mtg
APP_NAME := $(IMAGE_NAME)

GOLANGCI_LINT_VERSION := v1.45.0
GOLANGCI_LINT_VERSION := v1.48.0

VERSION_GO := $(shell go version)
VERSION_DATE := $(shell date -Ru)
Expand Down
4 changes: 2 additions & 2 deletions cli/proxy.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import (
"go.uber.org/zap/zapcore"
)

func Proxy() error { // nolint: funlen,cyclop
func Proxy() error { //nolint: funlen,cyclop
ctx := utils.GetSignalContext()

atom := zap.NewAtomicLevel()
Expand All @@ -41,7 +41,7 @@ func Proxy() error { // nolint: funlen,cyclop
))

zap.ReplaceGlobals(logger)
defer logger.Sync() // nolint: errcheck
defer logger.Sync() //nolint: errcheck

if err := config.InitPublicAddress(ctx); err != nil {
Fatal(err)
Expand Down
4 changes: 2 additions & 2 deletions cli/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (

func Fatal(arg interface{}) {
if value, ok := arg.(error); ok {
arg = fmt.Errorf("fatal error: %+v", value) // nolint: errorlint
arg = fmt.Errorf("fatal error: %+v", value) //nolint: errorlint
}

PrintStderr(arg)
Expand All @@ -21,7 +21,7 @@ func PrintStderr(args ...interface{}) {
}

func PrintStdout(args ...interface{}) {
fmt.Println(args...) // nolint: forbidigo
fmt.Println(args...) //nolint: forbidigo
}

func PrintJSONStderr(data interface{}) {
Expand Down
74 changes: 37 additions & 37 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,29 +79,29 @@ const (

type Config struct {
Bind *net.TCPAddr `json:"bind"`
PublicIPv4 *net.TCPAddr `json:"public_ipv4"` // nolint: tagliatelle
PublicIPv6 *net.TCPAddr `json:"public_ipv6"` // nolint: tagliatelle
StatsBind *net.TCPAddr `json:"stats_bind"` // nolint: tagliatelle
StatsdAddr *net.TCPAddr `json:"stats_addr"` // nolint: tagliatelle
StatsdTagsFormat *statsd.TagFormat `json:"statsd_tags_format"` // nolint: tagliatelle
PublicIPv4 *net.TCPAddr `json:"public_ipv4"` //nolint: tagliatelle
PublicIPv6 *net.TCPAddr `json:"public_ipv6"` //nolint: tagliatelle
StatsBind *net.TCPAddr `json:"stats_bind"` //nolint: tagliatelle
StatsdAddr *net.TCPAddr `json:"stats_addr"` //nolint: tagliatelle
StatsdTagsFormat *statsd.TagFormat `json:"statsd_tags_format"` //nolint: tagliatelle

StatsNamespace string `json:"stats_namespace"` // nolint: tagliatelle
CloakHost string `json:"cloak_host"` // nolint: tagliatelle
StatsdTags map[string]string `json:"statsd_tags"` // nolint: tagliatelle
StatsNamespace string `json:"stats_namespace"` //nolint: tagliatelle
CloakHost string `json:"cloak_host"` //nolint: tagliatelle
StatsdTags map[string]string `json:"statsd_tags"` //nolint: tagliatelle

WriteBuffer int `json:"write_buffer"` // nolint: tagliatelle
ReadBuffer int `json:"read_buffer"` // nolint: tagliatelle
CloakPort int `json:"cloak_port"` // nolint: tagliatelle
WriteBuffer int `json:"write_buffer"` //nolint: tagliatelle
ReadBuffer int `json:"read_buffer"` //nolint: tagliatelle
CloakPort int `json:"cloak_port"` //nolint: tagliatelle

AntiReplayMaxSize int `json:"anti_replay_max_size"` // nolint: tagliatelle
AntiReplayMaxSize int `json:"anti_replay_max_size"` //nolint: tagliatelle

MultiplexPerConnection int `json:"multiplex_per_connection"` // nolint: tagliatelle
MultiplexPerConnection int `json:"multiplex_per_connection"` //nolint: tagliatelle

Debug bool `json:"debug"`
Verbose bool `json:"verbose"`
SecretMode SecretMode `json:"secret_mode"` // nolint: tagliatelle
PreferIP PreferIP `json:"prefer_ip"` // nolint: tagliatelle
NTPServers []string `json:"ntp_servers"` // nolint: tagliatelle
SecretMode SecretMode `json:"secret_mode"` //nolint: tagliatelle
PreferIP PreferIP `json:"prefer_ip"` //nolint: tagliatelle
NTPServers []string `json:"ntp_servers"` //nolint: tagliatelle

Secret []byte `json:"secret"`
AdTag []byte `json:"adtag"`
Expand Down Expand Up @@ -146,7 +146,7 @@ func (c *Config) adjustProxyValue(value int) int {

fvalue := float64(value)

newValue := fvalue * 2 * math.Log(float64(c.MultiplexPerConnection)) // nolint: gomnd
newValue := fvalue * 2 * math.Log(float64(c.MultiplexPerConnection)) //nolint: gomnd
newValue = math.Ceil(newValue)
newValue = math.Max(fvalue, newValue)

Expand All @@ -160,15 +160,15 @@ type Opt struct {

var C = Config{}

func Init(options ...Opt) error { // nolint: gocyclo, funlen, cyclop
func Init(options ...Opt) error { //nolint: gocyclo, funlen, cyclop
for _, opt := range options {
switch opt.Option {
case OptionTypeDebug:
C.Debug = opt.Value.(bool) // nolint: forcetypeassert
C.Debug = opt.Value.(bool) //nolint: forcetypeassert
case OptionTypeVerbose:
C.Verbose = opt.Value.(bool) // nolint: forcetypeassert
C.Verbose = opt.Value.(bool) //nolint: forcetypeassert
case OptionTypePreferIP:
value := opt.Value.(string) // nolint: forcetypeassert
value := opt.Value.(string) //nolint: forcetypeassert
switch value {
case "ipv4":
C.PreferIP = PreferIPv4
Expand All @@ -178,25 +178,25 @@ func Init(options ...Opt) error { // nolint: gocyclo, funlen, cyclop
return fmt.Errorf("incorrect direct IP mode %s", value)
}
case OptionTypeBind:
C.Bind = opt.Value.(*net.TCPAddr) // nolint: forcetypeassert
C.Bind = opt.Value.(*net.TCPAddr) //nolint: forcetypeassert
case OptionTypePublicIPv4:
C.PublicIPv4 = opt.Value.(*net.TCPAddr) // nolint: forcetypeassert
C.PublicIPv4 = opt.Value.(*net.TCPAddr) //nolint: forcetypeassert
if C.PublicIPv4 == nil {
C.PublicIPv4 = &net.TCPAddr{}
}
case OptionTypePublicIPv6:
C.PublicIPv6 = opt.Value.(*net.TCPAddr) // nolint: forcetypeassert
C.PublicIPv6 = opt.Value.(*net.TCPAddr) //nolint: forcetypeassert
if C.PublicIPv6 == nil {
C.PublicIPv6 = &net.TCPAddr{}
}
case OptionTypeStatsBind:
C.StatsBind = opt.Value.(*net.TCPAddr) // nolint: forcetypeassert
C.StatsBind = opt.Value.(*net.TCPAddr) //nolint: forcetypeassert
case OptionTypeStatsNamespace:
C.StatsNamespace = opt.Value.(string) // nolint: forcetypeassert
C.StatsNamespace = opt.Value.(string) //nolint: forcetypeassert
case OptionTypeStatsdAddress:
C.StatsdAddr = opt.Value.(*net.TCPAddr) // nolint: forcetypeassert
C.StatsdAddr = opt.Value.(*net.TCPAddr) //nolint: forcetypeassert
case OptionTypeStatsdTagsFormat:
value := opt.Value.(string) // nolint: forcetypeassert
value := opt.Value.(string) //nolint: forcetypeassert
switch value {
case "datadog":
C.StatsdTagsFormat = statsd.TagFormatDatadog
Expand All @@ -206,26 +206,26 @@ func Init(options ...Opt) error { // nolint: gocyclo, funlen, cyclop
return fmt.Errorf("incorrect statsd tag %s", value)
}
case OptionTypeStatsdTags:
C.StatsdTags = opt.Value.(map[string]string) // nolint: forcetypeassert
C.StatsdTags = opt.Value.(map[string]string) //nolint: forcetypeassert
case OptionTypeWriteBufferSize:
C.WriteBuffer = int(opt.Value.(units.Base2Bytes)) // nolint: forcetypeassert
C.WriteBuffer = int(opt.Value.(units.Base2Bytes)) //nolint: forcetypeassert
case OptionTypeReadBufferSize:
C.ReadBuffer = int(opt.Value.(units.Base2Bytes)) // nolint: forcetypeassert
C.ReadBuffer = int(opt.Value.(units.Base2Bytes)) //nolint: forcetypeassert
case OptionTypeCloakPort:
C.CloakPort = int(opt.Value.(uint16)) // nolint: forcetypeassert
C.CloakPort = int(opt.Value.(uint16)) //nolint: forcetypeassert
case OptionTypeAntiReplayMaxSize:
C.AntiReplayMaxSize = int(opt.Value.(units.Base2Bytes)) // nolint: forcetypeassert
C.AntiReplayMaxSize = int(opt.Value.(units.Base2Bytes)) //nolint: forcetypeassert
case OptionTypeMultiplexPerConnection:
C.MultiplexPerConnection = int(opt.Value.(uint)) // nolint: forcetypeassert
C.MultiplexPerConnection = int(opt.Value.(uint)) //nolint: forcetypeassert
case OptionTypeNTPServers:
C.NTPServers = opt.Value.([]string) // nolint: forcetypeassert
C.NTPServers = opt.Value.([]string) //nolint: forcetypeassert
if len(C.NTPServers) == 0 {
return errors.New("ntp server list is empty")
}
case OptionTypeSecret:
C.Secret = opt.Value.([]byte) // nolint: forcetypeassert
C.Secret = opt.Value.([]byte) //nolint: forcetypeassert
case OptionTypeAdtag:
C.AdTag = opt.Value.([]byte) // nolint: forcetypeassert
C.AdTag = opt.Value.([]byte) //nolint: forcetypeassert
default:
return fmt.Errorf("unknown tag %v", opt.Option)
}
Expand Down
9 changes: 4 additions & 5 deletions config/global_ips.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"context"
"fmt"
"io"
"io/ioutil"
"net"
"net/http"
"strings"
Expand Down Expand Up @@ -41,28 +40,28 @@ func fetchIP(ctx context.Context, network string) (net.IP, error) {
Timeout: ifconfigTimeout,
Transport: &http.Transport{
DialContext: func(ctx context.Context, _, addr string) (net.Conn, error) {
return dialer.DialContext(ctx, network, addr) // nolint: wrapcheck
return dialer.DialContext(ctx, network, addr) //nolint: wrapcheck
},
},
}

req, err := http.NewRequest("GET", ifconfigAddress, nil)
req, err := http.NewRequest(http.MethodGet, ifconfigAddress, nil)
if err != nil {
return nil, fmt.Errorf("cannot create a request: %w", err)
}

resp, err := client.Do(req.WithContext(ctx))
if err != nil {
if resp != nil {
io.Copy(ioutil.Discard, resp.Body) // nolint: errcheck
io.Copy(io.Discard, resp.Body) //nolint: errcheck
}

return nil, fmt.Errorf("cannot perform a request: %w", err)
}

defer resp.Body.Close()

respDataBytes, err := ioutil.ReadAll(resp.Body)
respDataBytes, err := io.ReadAll(resp.Body)
if err != nil {
return nil, fmt.Errorf("cannot read response body: %w", err)
}
Expand Down
13 changes: 7 additions & 6 deletions config/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,20 +8,21 @@ import (
)

type URLs struct {
TG string `json:"tg_url"` // nolint: tagliatelle
TMe string `json:"tme_url"` // nolint: tagliatelle
TGQRCode string `json:"tg_qrcode"` // nolint: tagliatelle
TMeQRCode string `json:"tme_qrcode"` // nolint: tagliatelle
TG string `json:"tg_url"` //nolint: tagliatelle
TMe string `json:"tme_url"` //nolint: tagliatelle
TGQRCode string `json:"tg_qrcode"` //nolint: tagliatelle
TMeQRCode string `json:"tme_qrcode"` //nolint: tagliatelle
}

type IPURLs struct {
IPv4 *URLs `json:"ipv4,omitempty"`
IPv6 *URLs `json:"ipv6,omitempty"`
BotSecret string `json:"secret_for_mtproxybot"` // nolint: tagliatelle
BotSecret string `json:"secret_for_mtproxybot"` //nolint: tagliatelle
}

func GetURLs() (urls IPURLs) {
func GetURLs() IPURLs {
secret := ""
urls := IPURLs{}

switch C.SecretMode {
case SecretModeSimple:
Expand Down
4 changes: 2 additions & 2 deletions faketls/client_protocol.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,10 @@ func (c *ClientProtocol) Handshake(socket conntypes.StreamReadWriteCloser) (conn

conn, err := c.ClientProtocol.Handshake(conn)
if err != nil {
return nil, err // nolint: wrapcheck
return nil, err //nolint: wrapcheck
}

return conn, err // nolint: wrapcheck
return conn, err //nolint: wrapcheck
}

func (c *ClientProtocol) tlsHandshake(conn io.ReadWriter) error {
Expand Down
4 changes: 2 additions & 2 deletions faketls/cloak.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ func cloak(one, another io.ReadWriteCloser) {
another = rwc.NewPing(ctx, another, channelPing)
wg := &sync.WaitGroup{}

wg.Add(2) // nolint: gomnd
wg.Add(2) //nolint: gomnd

go cloakPipe(one, another, wg)

Expand Down Expand Up @@ -69,5 +69,5 @@ func cloak(one, another io.ReadWriteCloser) {
func cloakPipe(one io.Writer, another io.Reader, wg *sync.WaitGroup) {
defer wg.Done()

io.Copy(one, another) // nolint: errcheck
io.Copy(one, another) //nolint: errcheck
}
7 changes: 5 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ require (
go.uber.org/multierr v1.8.0 // indirect
go.uber.org/zap v1.21.0
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd
golang.org/x/net v0.0.0-20220225172249-27dd8689420f // indirect
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8
golang.org/x/net v0.0.0-20220809012201-f428fae20770 // indirect
golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664
google.golang.org/protobuf v1.27.1 // indirect
gopkg.in/alecthomas/kingpin.v2 v2.2.6
)
Expand All @@ -27,5 +27,8 @@ require (
github.com/golang/protobuf v1.5.2 // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/yuin/goldmark v1.4.13 // indirect
go.uber.org/atomic v1.9.0 // indirect
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
golang.org/x/tools v0.1.12 // indirect
)
10 changes: 10 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,8 @@ github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
Expand Down Expand Up @@ -262,6 +264,8 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
Expand Down Expand Up @@ -294,6 +298,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f h1:oA4XRj0qtSt8Yo1Zms0CUlsT3KG69V2UGQWPBxujDmc=
golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
golang.org/x/net v0.0.0-20220809012201-f428fae20770 h1:dIi4qVdvjZEjiMDv7vhokAZNGnz3kepwuXqFKYDdDMs=
golang.org/x/net v0.0.0-20220809012201-f428fae20770/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand Down Expand Up @@ -351,6 +357,8 @@ golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBc
golang.org/x/sys v0.0.0-20220204135822-1c1b9b1eba6a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs=
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664 h1:v1W7bwXHsnLLloWYTVEdvGvA7BHMeBYsPcF0GLDxIRs=
golang.org/x/sys v0.0.0-20220808155132-1c4a2a72c664/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
Expand Down Expand Up @@ -402,6 +410,8 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
Expand Down
Loading

0 comments on commit f481568

Please sign in to comment.