diff --git a/vendor/cmd/go/internal/envcmd/env.go b/vendor/cmd/go/internal/envcmd/env.go
index b120b2d..f8cea09 100644
--- a/vendor/cmd/go/internal/envcmd/env.go
+++ b/vendor/cmd/go/internal/envcmd/env.go
@@ -17,7 +17,7 @@
 	"cmd/go/internal/cache"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/load"
-	"cmd/go/internal/vgo"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/work"
 )
 
@@ -117,8 +117,8 @@
 // ExtraEnvVars returns environment variables that should not leak into child processes.
 func ExtraEnvVars() []cfg.EnvVar {
 	gomod := ""
-	if vgo.Init(); vgo.ModRoot != "" {
-		gomod = filepath.Join(vgo.ModRoot, "go.mod")
+	if modload.Init(); modload.ModRoot != "" {
+		gomod = filepath.Join(modload.ModRoot, "go.mod")
 	}
 	return []cfg.EnvVar{
 		{Name: "GOMOD", Value: gomod},
diff --git a/vendor/cmd/go/internal/fix/fix.go b/vendor/cmd/go/internal/fix/fix.go
index b0b1aa7..8de746c 100644
--- a/vendor/cmd/go/internal/fix/fix.go
+++ b/vendor/cmd/go/internal/fix/fix.go
@@ -9,8 +9,8 @@
 	"cmd/go/internal/base"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/load"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/str"
-	"cmd/go/internal/vgo"
 	"fmt"
 	"os"
 )
@@ -34,7 +34,7 @@
 func runFix(cmd *base.Command, args []string) {
 	printed := false
 	for _, pkg := range load.Packages(args) {
-		if vgo.Enabled() && !pkg.Module.Main {
+		if modload.Enabled() && !pkg.Module.Main {
 			if !printed {
 				fmt.Fprintf(os.Stderr, "vgo: not fixing packages in dependency modules\n")
 				printed = true
diff --git a/vendor/cmd/go/internal/fmtcmd/fmt.go b/vendor/cmd/go/internal/fmtcmd/fmt.go
index adb3cfa..800169e 100644
--- a/vendor/cmd/go/internal/fmtcmd/fmt.go
+++ b/vendor/cmd/go/internal/fmtcmd/fmt.go
@@ -16,8 +16,8 @@
 	"cmd/go/internal/base"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/load"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/str"
-	"cmd/go/internal/vgo"
 )
 
 func init() {
@@ -60,7 +60,7 @@
 		}()
 	}
 	for _, pkg := range load.PackagesAndErrors(args) {
-		if vgo.Enabled() && !pkg.Module.Main {
+		if modload.Enabled() && !pkg.Module.Main {
 			if !printed {
 				fmt.Fprintf(os.Stderr, "vgo: not formatting packages in dependency modules\n")
 				printed = true
diff --git a/vendor/cmd/go/internal/generate/generate.go b/vendor/cmd/go/internal/generate/generate.go
index ffe8530..130cefd 100644
--- a/vendor/cmd/go/internal/generate/generate.go
+++ b/vendor/cmd/go/internal/generate/generate.go
@@ -21,7 +21,7 @@
 	"cmd/go/internal/base"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/load"
-	"cmd/go/internal/vgo"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/work"
 )
 
@@ -155,7 +155,7 @@
 	// Even if the arguments are .go files, this loop suffices.
 	printed := false
 	for _, pkg := range load.Packages(args) {
-		if vgo.Enabled() && !pkg.Module.Main {
+		if modload.Enabled() && !pkg.Module.Main {
 			if !printed {
 				fmt.Fprintf(os.Stderr, "vgo: not generating in packages in dependency modules\n")
 				printed = true
diff --git a/vendor/cmd/go/internal/list/list.go b/vendor/cmd/go/internal/list/list.go
index 788542a..727009c 100644
--- a/vendor/cmd/go/internal/list/list.go
+++ b/vendor/cmd/go/internal/list/list.go
@@ -19,7 +19,7 @@
 	"cmd/go/internal/cache"
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/load"
-	"cmd/go/internal/vgo"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/work"
 )
 
@@ -332,7 +332,7 @@
 		fm := template.FuncMap{
 			"join":    strings.Join,
 			"context": context,
-			"module":  vgo.ModuleInfo,
+			"module":  modload.ModuleInfo,
 		}
 		tmpl, err := template.New("main").Funcs(fm).Parse(*listFmt)
 		if err != nil {
@@ -365,12 +365,12 @@
 			base.Fatalf("go list -test cannot be used with -m")
 		}
 
-		if vgo.Init(); !vgo.Enabled() {
+		if modload.Init(); !modload.Enabled() {
 			base.Fatalf("go list -m: not using modules")
 		}
-		vgo.LoadBuildList()
+		modload.LoadBuildList()
 
-		mods := vgo.ListModules(args, *listU, *listVersions)
+		mods := modload.ListModules(args, *listU, *listVersions)
 		if !*listE {
 			for _, m := range mods {
 				if m.Error != nil {
diff --git a/vendor/cmd/go/internal/modcmd/mod.go b/vendor/cmd/go/internal/modcmd/mod.go
index efdcd8a..db3c2cf 100644
--- a/vendor/cmd/go/internal/modcmd/mod.go
+++ b/vendor/cmd/go/internal/modcmd/mod.go
@@ -15,9 +15,9 @@
 
 	"cmd/go/internal/base"
 	"cmd/go/internal/modfile"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/module"
 	"cmd/go/internal/par"
-	"cmd/go/internal/vgo"
 )
 
 var CmdMod = &base.Command{
@@ -189,8 +189,8 @@
 func init() {
 	CmdMod.Run = runMod // break init cycle
 
-	CmdMod.Flag.BoolVar(&vgo.CmdModInit, "init", vgo.CmdModInit, "")
-	CmdMod.Flag.StringVar(&vgo.CmdModModule, "module", vgo.CmdModModule, "")
+	CmdMod.Flag.BoolVar(&modload.CmdModInit, "init", modload.CmdModInit, "")
+	CmdMod.Flag.StringVar(&modload.CmdModModule, "module", modload.CmdModModule, "")
 
 	CmdMod.Flag.Var(flagFunc(flagRequire), "require", "")
 	CmdMod.Flag.Var(flagFunc(flagDropRequire), "droprequire", "")
@@ -203,7 +203,7 @@
 }
 
 func runMod(cmd *base.Command, args []string) {
-	if vgo.Init(); !vgo.Enabled() {
+	if modload.Init(); !modload.Enabled() {
 		base.Fatalf("vgo mod: cannot use outside module")
 	}
 	if len(args) != 0 {
@@ -211,8 +211,8 @@
 	}
 
 	anyFlags :=
-		vgo.CmdModInit ||
-			vgo.CmdModModule != "" ||
+		modload.CmdModInit ||
+			modload.CmdModModule != "" ||
 			*modVendor ||
 			*modVerify ||
 			*modJSON ||
@@ -227,24 +227,24 @@
 		base.Fatalf("vgo mod: no flags specified (see 'go help mod').")
 	}
 
-	if vgo.CmdModModule != "" {
-		if err := module.CheckPath(vgo.CmdModModule); err != nil {
+	if modload.CmdModModule != "" {
+		if err := module.CheckPath(modload.CmdModModule); err != nil {
 			base.Fatalf("vgo mod: invalid -module: %v", err)
 		}
 	}
 
-	if vgo.CmdModInit {
+	if modload.CmdModInit {
 		if _, err := os.Stat("go.mod"); err == nil {
 			base.Fatalf("vgo mod -init: go.mod already exists")
 		}
 	}
-	vgo.InitMod()
+	modload.InitMod()
 
 	// Syntactic edits.
 
-	modFile := vgo.ModFile()
-	if vgo.CmdModModule != "" {
-		modFile.AddModuleStmt(vgo.CmdModModule)
+	modFile := modload.ModFile()
+	if modload.CmdModModule != "" {
+		modFile.AddModuleStmt(modload.CmdModModule)
 	}
 
 	if len(modEdits) > 0 {
@@ -252,7 +252,7 @@
 			edit(modFile)
 		}
 	}
-	vgo.WriteGoMod() // write back syntactic changes
+	modload.WriteGoMod() // write back syntactic changes
 
 	// Semantic edits.
 
@@ -261,34 +261,34 @@
 	if *modSync || *modVendor || needBuildList {
 		var pkgs []string
 		if *modSync || *modVendor {
-			pkgs = vgo.LoadALL()
+			pkgs = modload.LoadALL()
 		} else {
-			vgo.LoadBuildList()
+			modload.LoadBuildList()
 		}
 		if *modSync {
 			// LoadALL already added missing modules.
 			// Remove unused modules.
-			used := map[module.Version]bool{vgo.Target: true}
+			used := map[module.Version]bool{modload.Target: true}
 			for _, pkg := range pkgs {
-				used[vgo.PackageModule(pkg)] = true
+				used[modload.PackageModule(pkg)] = true
 			}
 
 			inGoMod := make(map[string]bool)
-			for _, r := range vgo.ModFile().Require {
+			for _, r := range modload.ModFile().Require {
 				inGoMod[r.Mod.Path] = true
 			}
 
 			var keep []module.Version
-			for _, m := range vgo.BuildList() {
+			for _, m := range modload.BuildList() {
 				if used[m] {
 					keep = append(keep, m)
 				} else if *modV && inGoMod[m.Path] {
 					fmt.Fprintf(os.Stderr, "unused %s\n", m.Path)
 				}
 			}
-			vgo.SetBuildList(keep)
+			modload.SetBuildList(keep)
 		}
-		vgo.WriteGoMod()
+		modload.WriteGoMod()
 		if *modVendor {
 			runVendor()
 		}
@@ -305,7 +305,7 @@
 	}
 
 	if *modPackages {
-		for _, pkg := range vgo.TargetPackages() {
+		for _, pkg := range modload.TargetPackages() {
 			fmt.Printf("%s\n", pkg)
 		}
 	}
@@ -461,7 +461,7 @@
 
 // modPrintJSON prints the -json output.
 func modPrintJSON() {
-	modFile := vgo.ModFile()
+	modFile := modload.ModFile()
 
 	var f fileJSON
 	f.Module = modFile.Module.Mod
@@ -484,7 +484,7 @@
 
 // modPrintGraph prints the -graph output.
 func modPrintGraph() {
-	reqs := vgo.Reqs()
+	reqs := modload.Reqs()
 
 	format := func(m module.Version) string {
 		if m.Version == "" {
@@ -498,7 +498,7 @@
 	var out []string
 	var deps int // index in out where deps start
 	var work par.Work
-	work.Add(vgo.Target)
+	work.Add(modload.Target)
 	work.Do(1, func(item interface{}) {
 		m := item.(module.Version)
 		list, _ := reqs.Required(m)
@@ -506,7 +506,7 @@
 			work.Add(r)
 			out = append(out, format(m)+" "+format(r)+"\n")
 		}
-		if m == vgo.Target {
+		if m == modload.Target {
 			deps = len(out)
 		}
 	})
diff --git a/vendor/cmd/go/internal/modcmd/vendor.go b/vendor/cmd/go/internal/modcmd/vendor.go
index 6a17dc1..b0e6001 100644
--- a/vendor/cmd/go/internal/modcmd/vendor.go
+++ b/vendor/cmd/go/internal/modcmd/vendor.go
@@ -14,32 +14,32 @@
 	"strings"
 
 	"cmd/go/internal/base"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/module"
-	"cmd/go/internal/vgo"
 )
 
 func runVendor() {
-	pkgs := vgo.LoadVendor()
+	pkgs := modload.LoadVendor()
 
-	vdir := filepath.Join(vgo.ModRoot, "vendor")
+	vdir := filepath.Join(modload.ModRoot, "vendor")
 	if err := os.RemoveAll(vdir); err != nil {
 		base.Fatalf("vgo vendor: %v", err)
 	}
 
 	modpkgs := make(map[module.Version][]string)
 	for _, pkg := range pkgs {
-		m := vgo.PackageModule(pkg)
-		if m == vgo.Target {
+		m := modload.PackageModule(pkg)
+		if m == modload.Target {
 			continue
 		}
 		modpkgs[m] = append(modpkgs[m], pkg)
 	}
 
 	var buf bytes.Buffer
-	for _, m := range vgo.BuildList()[1:] {
+	for _, m := range modload.BuildList()[1:] {
 		if pkgs := modpkgs[m]; len(pkgs) > 0 {
 			repl := ""
-			if r := vgo.Replacement(m); r.Path != "" {
+			if r := modload.Replacement(m); r.Path != "" {
 				repl = " => " + r.Path
 				if r.Version != "" {
 					repl += " " + r.Version
@@ -62,24 +62,24 @@
 		fmt.Fprintf(os.Stderr, "vgo: no dependencies to vendor\n")
 		return
 	}
-	if err := ioutil.WriteFile(filepath.Join(vdir, "vgo.list"), buf.Bytes(), 0666); err != nil {
-		base.Fatalf("vgo vendor: %v", err)
+	if err := ioutil.WriteFile(filepath.Join(vdir, "modules.txt"), buf.Bytes(), 0666); err != nil {
+		base.Fatalf("go vendor: %v", err)
 	}
 }
 
 func vendorPkg(vdir, pkg string) {
-	realPath := vgo.ImportMap(pkg)
-	if realPath != pkg && vgo.ImportMap(realPath) != "" {
+	realPath := modload.ImportMap(pkg)
+	if realPath != pkg && modload.ImportMap(realPath) != "" {
 		fmt.Fprintf(os.Stderr, "warning: %s imported as both %s and %s; making two copies.\n", realPath, realPath, pkg)
 	}
 
 	dst := filepath.Join(vdir, pkg)
-	src := vgo.PackageDir(realPath)
+	src := modload.PackageDir(realPath)
 	if src == "" {
 		fmt.Fprintf(os.Stderr, "internal error: no pkg for %s -> %s\n", pkg, realPath)
 	}
 	copyDir(dst, src, matchNonTest)
-	if m := vgo.PackageModule(realPath); m.Path != "" {
+	if m := modload.PackageModule(realPath); m.Path != "" {
 		copyMetadata(m.Path, realPath, dst, src)
 	}
 }
diff --git a/vendor/cmd/go/internal/modcmd/verify.go b/vendor/cmd/go/internal/modcmd/verify.go
index 5330146..72bd7a5 100644
--- a/vendor/cmd/go/internal/modcmd/verify.go
+++ b/vendor/cmd/go/internal/modcmd/verify.go
@@ -13,13 +13,13 @@
 
 	"cmd/go/internal/base"
 	"cmd/go/internal/dirhash"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/module"
-	"cmd/go/internal/vgo"
 )
 
 func runVerify() {
 	ok := true
-	for _, mod := range vgo.LoadBuildList()[1:] {
+	for _, mod := range modload.LoadBuildList()[1:] {
 		ok = verifyMod(mod) && ok
 	}
 	if ok {
@@ -29,9 +29,9 @@
 
 func verifyMod(mod module.Version) bool {
 	ok := true
-	zip := filepath.Join(vgo.SrcMod, "cache/download", mod.Path, "/@v/", mod.Version+".zip")
+	zip := filepath.Join(modload.SrcMod, "cache/download", mod.Path, "/@v/", mod.Version+".zip")
 	_, zipErr := os.Stat(zip)
-	dir := filepath.Join(vgo.SrcMod, mod.Path+"@"+mod.Version)
+	dir := filepath.Join(modload.SrcMod, mod.Path+"@"+mod.Version)
 	_, dirErr := os.Stat(dir)
 	data, err := ioutil.ReadFile(zip + "hash")
 	if err != nil {
diff --git a/vendor/cmd/go/internal/modfetch/codehost/codehost.go b/vendor/cmd/go/internal/modfetch/codehost/codehost.go
index f31653d..f47b8ad 100644
--- a/vendor/cmd/go/internal/modfetch/codehost/codehost.go
+++ b/vendor/cmd/go/internal/modfetch/codehost/codehost.go
@@ -95,7 +95,7 @@
 }
 
 // WorkRoot is the root of the cached work directory.
-// It is set by cmd/go/internal/vgo.InitMod.
+// It is set by cmd/go/internal/modload.InitMod.
 var WorkRoot string
 
 // WorkDir returns the name of the cached work directory to use for the
diff --git a/vendor/cmd/go/internal/modget/get.go b/vendor/cmd/go/internal/modget/get.go
index e6756c3..08a8e7c 100644
--- a/vendor/cmd/go/internal/modget/get.go
+++ b/vendor/cmd/go/internal/modget/get.go
@@ -10,10 +10,10 @@
 	"cmd/go/internal/get"
 	"cmd/go/internal/load"
 	"cmd/go/internal/modfetch"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/module"
 	"cmd/go/internal/mvs"
 	"cmd/go/internal/semver"
-	"cmd/go/internal/vgo"
 	"cmd/go/internal/work"
 	"strings"
 )
@@ -148,7 +148,7 @@
 	getT   = CmdGet.Flag.Bool("t", false, "")
 
 	// -insecure is get.Insecure
-	// -u is vgo.GetU
+	// -u is modload.GetU
 	// -v is cfg.BuildV
 )
 
@@ -156,24 +156,24 @@
 	work.AddBuildFlags(CmdGet)
 	CmdGet.Run = runGet // break init loop
 	CmdGet.Flag.BoolVar(&get.Insecure, "insecure", get.Insecure, "")
-	CmdGet.Flag.BoolVar(&vgo.GetU, "u", vgo.GetU, "")
+	CmdGet.Flag.BoolVar(&modload.GetU, "u", modload.GetU, "")
 }
 
 func runGet(cmd *base.Command, args []string) {
-	if vgo.GetU && len(args) > 0 {
+	if modload.GetU && len(args) > 0 {
 		base.Fatalf("vgo get: -u not supported with argument list")
 	}
-	if !vgo.GetU && len(args) == 0 {
+	if !modload.GetU && len(args) == 0 {
 		base.Fatalf("vgo get: need arguments or -u")
 	}
 
-	if vgo.GetU {
-		vgo.LoadBuildList()
+	if modload.GetU {
+		modload.LoadBuildList()
 		return
 	}
 
-	vgo.Init()
-	vgo.InitMod()
+	modload.Init()
+	modload.InitMod()
 	var upgrade []module.Version
 	var downgrade []module.Version
 	var newPkgs []string
@@ -203,7 +203,7 @@
 		if vers == "none" {
 			downgrade = append(downgrade, module.Version{Path: path, Version: ""})
 		} else {
-			info, err := modfetch.Query(path, vers, vgo.Allowed)
+			info, err := modfetch.Query(path, vers, modload.Allowed)
 			if err != nil {
 				base.Errorf("vgo get %v: %v", pkg, err)
 				continue
@@ -216,17 +216,17 @@
 
 	// Upgrade.
 	var err error
-	list, err := mvs.Upgrade(vgo.Target, vgo.Reqs(), upgrade...)
+	list, err := mvs.Upgrade(modload.Target, modload.Reqs(), upgrade...)
 	if err != nil {
 		base.Fatalf("vgo get: %v", err)
 	}
-	vgo.SetBuildList(list)
+	modload.SetBuildList(list)
 
-	vgo.LoadBuildList()
+	modload.LoadBuildList()
 
 	// Downgrade anything that went too far.
 	version := make(map[string]string)
-	for _, mod := range vgo.BuildList() {
+	for _, mod := range modload.BuildList() {
 		version[mod.Path] = mod.Version
 	}
 	for _, mod := range upgrade {
@@ -236,11 +236,11 @@
 	}
 
 	if len(downgrade) > 0 {
-		list, err := mvs.Downgrade(vgo.Target, vgo.Reqs(), downgrade...)
+		list, err := mvs.Downgrade(modload.Target, modload.Reqs(), downgrade...)
 		if err != nil {
 			base.Fatalf("vgo get: %v", err)
 		}
-		vgo.SetBuildList(list)
+		modload.SetBuildList(list)
 
 		// TODO: Check that everything we need to import is still available.
 		/*
@@ -260,11 +260,11 @@
 			}
 		*/
 	}
-	vgo.WriteGoMod()
+	modload.WriteGoMod()
 
 	if *getD {
 		// Download all needed code as side-effect.
-		vgo.LoadALL()
+		modload.LoadALL()
 	}
 
 	if *getM {
diff --git a/vendor/cmd/go/internal/vgo/build.go b/vendor/cmd/go/internal/modload/build.go
similarity index 99%
rename from vendor/cmd/go/internal/vgo/build.go
rename to vendor/cmd/go/internal/modload/build.go
index efee74b..453d216 100644
--- a/vendor/cmd/go/internal/vgo/build.go
+++ b/vendor/cmd/go/internal/modload/build.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package vgo
+package modload
 
 import (
 	"bytes"
diff --git a/vendor/cmd/go/internal/vgo/help.go b/vendor/cmd/go/internal/modload/help.go
similarity index 99%
rename from vendor/cmd/go/internal/vgo/help.go
rename to vendor/cmd/go/internal/modload/help.go
index a34cd87..b457433 100644
--- a/vendor/cmd/go/internal/vgo/help.go
+++ b/vendor/cmd/go/internal/modload/help.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package vgo
+package modload
 
 import "cmd/go/internal/base"
 
diff --git a/vendor/cmd/go/internal/vgo/init.go b/vendor/cmd/go/internal/modload/init.go
similarity index 99%
rename from vendor/cmd/go/internal/vgo/init.go
rename to vendor/cmd/go/internal/modload/init.go
index 2d74967..24d5044 100644
--- a/vendor/cmd/go/internal/vgo/init.go
+++ b/vendor/cmd/go/internal/modload/init.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package vgo
+package modload
 
 import (
 	"bytes"
diff --git a/vendor/cmd/go/internal/vgo/list.go b/vendor/cmd/go/internal/modload/list.go
similarity index 98%
rename from vendor/cmd/go/internal/vgo/list.go
rename to vendor/cmd/go/internal/modload/list.go
index 761eae1..a35d60a 100644
--- a/vendor/cmd/go/internal/vgo/list.go
+++ b/vendor/cmd/go/internal/modload/list.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package vgo
+package modload
 
 import (
 	"fmt"
diff --git a/vendor/cmd/go/internal/vgo/load.go b/vendor/cmd/go/internal/modload/load.go
similarity index 99%
rename from vendor/cmd/go/internal/vgo/load.go
rename to vendor/cmd/go/internal/modload/load.go
index dc2677e..b687680 100644
--- a/vendor/cmd/go/internal/vgo/load.go
+++ b/vendor/cmd/go/internal/modload/load.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package vgo
+package modload
 
 import (
 	"bytes"
diff --git a/vendor/cmd/go/internal/vgo/search.go b/vendor/cmd/go/internal/modload/search.go
similarity index 99%
rename from vendor/cmd/go/internal/vgo/search.go
rename to vendor/cmd/go/internal/modload/search.go
index 9e2bc51..481fb98 100644
--- a/vendor/cmd/go/internal/vgo/search.go
+++ b/vendor/cmd/go/internal/modload/search.go
@@ -2,7 +2,7 @@
 // Use of this source code is governed by a BSD-style
 // license that can be found in the LICENSE file.
 
-package vgo
+package modload
 
 import (
 	"fmt"
diff --git a/vendor/cmd/go/main.go b/vendor/cmd/go/main.go
index 6f25c25..0f84bb5 100644
--- a/vendor/cmd/go/main.go
+++ b/vendor/cmd/go/main.go
@@ -29,12 +29,12 @@
 	"cmd/go/internal/list"
 	"cmd/go/internal/modcmd"
 	"cmd/go/internal/modget"
+	"cmd/go/internal/modload"
 	"cmd/go/internal/run"
 	"cmd/go/internal/test"
 	"cmd/go/internal/tool"
 	"cmd/go/internal/version"
 	"cmd/go/internal/vet"
-	"cmd/go/internal/vgo"
 	"cmd/go/internal/work"
 )
 
@@ -66,7 +66,7 @@
 		help.HelpGopath,
 		get.HelpGopathGet,
 		help.HelpImportPath,
-		vgo.HelpModules,
+		modload.HelpModules,
 		modget.HelpModuleGet,
 		help.HelpPackages,
 		test.HelpTestflag,
@@ -85,7 +85,7 @@
 		base.Usage()
 	}
 
-	if vgo.MustBeVgo {
+	if modload.MustBeVgo {
 		// If running as vgo or with -vgo, change get now to change help message.
 		*get.CmdGet = *modget.CmdGet
 	}
@@ -129,10 +129,10 @@
 
 	switch args[0] {
 	case "mod":
-		// Skip vgo.Init (which may insist on go.mod existing)
+		// Skip modload.Init (which may insist on go.mod existing)
 		// so that go mod -init has a chance to write the file.
 	case "version":
-		// Skip vgo.Init so that users can report bugs against
+		// Skip modload.Init so that users can report bugs against
 		// go mod -init.
 	case "vendor":
 		fmt.Fprintf(os.Stderr, "go vendor is now go mod -vendor\n")
@@ -141,10 +141,10 @@
 		fmt.Fprintf(os.Stderr, "go verify is now go mod -verify\n")
 		os.Exit(2)
 	default:
-		// Run vgo.Init so that each subcommand doesn't have to worry about it.
+		// Run modload.Init so that each subcommand doesn't have to worry about it.
 		// Also install the vgo get command instead of the old go get command in vgo mode.
-		vgo.Init()
-		if vgo.Enabled() {
+		modload.Init()
+		if modload.Enabled() {
 			// Might not have done this above, so do it now.
 			*get.CmdGet = *modget.CmdGet
 		}
diff --git a/vendor/cmd/go/mod_test.go b/vendor/cmd/go/mod_test.go
index 60ec249..79b4370 100644
--- a/vendor/cmd/go/mod_test.go
+++ b/vendor/cmd/go/mod_test.go
@@ -18,7 +18,7 @@
 
 	"cmd/go/internal/cfg"
 	"cmd/go/internal/modconv"
-	"cmd/go/internal/vgo"
+	"cmd/go/internal/modload"
 )
 
 func TestModVGOROOT(t *testing.T) {
@@ -112,7 +112,7 @@
 
 	for file := range modconv.Converters {
 		tg.must(ioutil.WriteFile(tg.path("x/"+file), []byte{}, 0666))
-		root, file1 := vgo.FindModuleRoot(tg.path("x/y/z"), tg.path("."), true)
+		root, file1 := modload.FindModuleRoot(tg.path("x/y/z"), tg.path("."), true)
 		if root != tg.path("x") || file1 != file {
 			t.Errorf("%s: findModuleRoot = %q, %q, want %q, %q", file, root, file1, tg.path("x"), file)
 		}
@@ -128,7 +128,7 @@
 
 	tg.must(os.MkdirAll(tg.path("x"), 0777))
 	tg.must(ioutil.WriteFile(tg.path("x/x.go"), []byte("package x // import \"x\"\n"), 0666))
-	path, err := vgo.FindModulePath(tg.path("x"))
+	path, err := modload.FindModulePath(tg.path("x"))
 	if err != nil {
 		t.Fatal(err)
 	}
@@ -138,7 +138,7 @@
 
 	// Windows line-ending.
 	tg.must(ioutil.WriteFile(tg.path("x/x.go"), []byte("package x // import \"x\"\r\n"), 0666))
-	path, err = vgo.FindModulePath(tg.path("x"))
+	path, err = modload.FindModulePath(tg.path("x"))
 	if path != "x" || err != nil {
 		t.Fatalf("FindModulePath = %q, %v, want %q, nil", path, err, "x")
 	}
@@ -150,7 +150,7 @@
 		cfg.BuildContext.GOPATH = gopath
 	}()
 	cfg.BuildContext.GOPATH = tg.path("gp")
-	path, err = vgo.FindModulePath(tg.path("gp/src/example.com/x/y/z"))
+	path, err = modload.FindModulePath(tg.path("gp/src/example.com/x/y/z"))
 	if path != "example.com/x/y/z" || err != nil {
 		t.Fatalf("FindModulePath = %q, %v, want %q, nil", path, err, "example.com/x/y/z")
 	}
@@ -158,7 +158,7 @@
 	tg.tempFile("gp/src/example.com/x/y/z/Godeps/Godeps.json", `
 		{"ImportPath": "unexpected.com/z"}
 	`)
-	path, err = vgo.FindModulePath(tg.path("gp/src/example.com/x/y/z"))
+	path, err = modload.FindModulePath(tg.path("gp/src/example.com/x/y/z"))
 	if path != "unexpected.com/z" || err != nil {
 		t.Fatalf("FindModulePath = %q, %v, want %q, nil", path, err, "unexpected.com/z")
 	}
