var RootMode … var ForceUseModules … var allowMissingModuleImports … var ExplicitWriteGoMod … var initialized … var modRoots … var gopath … // EnterModule resets MainModules and requirements to refer to just this one module. func EnterModule(ctx context.Context, enterModroot string) { … } var workFilePath … type MainModuleSet … func (mms *MainModuleSet) PathPrefix(m module.Version) string { … } // Versions returns the module.Version values of each of the main modules. // For each of them, the Path fields are ordinary module paths and the Version // fields are empty strings. // Callers should not modify the returned slice. func (mms *MainModuleSet) Versions() []module.Version { … } // Tools returns the tools defined by all the main modules. // The key is the absolute package path of the tool. func (mms *MainModuleSet) Tools() map[string]bool { … } func (mms *MainModuleSet) Contains(path string) bool { … } func (mms *MainModuleSet) ModRoot(m module.Version) string { … } func (mms *MainModuleSet) InGorootSrc(m module.Version) bool { … } func (mms *MainModuleSet) mustGetSingleMainModule() module.Version { … } func (mms *MainModuleSet) GetSingleIndexOrNil() *modFileIndex { … } func (mms *MainModuleSet) Index(m module.Version) *modFileIndex { … } func (mms *MainModuleSet) SetIndex(m module.Version, index *modFileIndex) { … } func (mms *MainModuleSet) ModFile(m module.Version) *modfile.File { … } func (mms *MainModuleSet) WorkFile() *modfile.WorkFile { … } func (mms *MainModuleSet) Len() int { … } // ModContainingCWD returns the main module containing the working directory, // or module.Version{} if none of the main modules contain the working // directory. func (mms *MainModuleSet) ModContainingCWD() module.Version { … } func (mms *MainModuleSet) HighestReplaced() map[string]string { … } // GoVersion returns the go version set on the single module, in module mode, // or the go.work file in workspace mode. func (mms *MainModuleSet) GoVersion() string { … } // Godebugs returns the godebug lines set on the single module, in module mode, // or on the go.work file in workspace mode. // The caller must not modify the result. func (mms *MainModuleSet) Godebugs() []*modfile.Godebug { … } // Toolchain returns the toolchain set on the single module, in module mode, // or the go.work file in workspace mode. func (mms *MainModuleSet) Toolchain() string { … } func (mms *MainModuleSet) WorkFileReplaceMap() map[module.Version]module.Version { … } var MainModules … type Root … const AutoRoot … const NoRoot … const NeedRoot … // ModFile returns the parsed go.mod file. // // Note that after calling LoadPackages or LoadModGraph, // the require statements in the modfile.File are no longer // the source of truth and will be ignored: edits made directly // will be lost at the next call to WriteGoMod. // To make permanent changes to the require statements // in go.mod, edit it before loading. func ModFile() *modfile.File { … } func BinDir() string { … } // InitWorkfile initializes the workFilePath variable for commands that // operate in workspace mode. It should not be called by other commands, // for example 'go mod tidy', that don't operate in workspace mode. func InitWorkfile() { … } // FindGoWork returns the name of the go.work file for this command, // or the empty string if there isn't one. // Most code should use Init and Enabled rather than use this directly. // It is exported mainly for Go toolchain switching, which must process // the go.work very early at startup. func FindGoWork(wd string) string { … } // WorkFilePath returns the absolute path of the go.work file, or "" if not in // workspace mode. WorkFilePath must be called after InitWorkfile. func WorkFilePath() string { … } // Reset clears all the initialized, cached state about the use of modules, // so that we can start over. func Reset() { … } // Init determines whether module mode is enabled, locates the root of the // current module (if any), sets environment variables for Git subprocesses, and // configures the cfg, codehost, load, modfetch, and search packages for use // with modules. func Init() { … } // WillBeEnabled checks whether modules should be enabled but does not // initialize modules by installing hooks. If Init has already been called, // WillBeEnabled returns the same result as Enabled. // // This function is needed to break a cycle. The main package needs to know // whether modules are enabled in order to install the module or GOPATH version // of 'go get', but Init reads the -modfile flag in 'go get', so it shouldn't // be called until the command is installed and flags are parsed. Instead of // calling Init and Enabled, the main package can call this function. func WillBeEnabled() bool { … } // FindGoMod returns the name of the go.mod file for this command, // or the empty string if there isn't one. // Most code should use Init and Enabled rather than use this directly. // It is exported mainly for Go toolchain switching, which must process // the go.mod very early at startup. func FindGoMod(wd string) string { … } // Enabled reports whether modules are (or must be) enabled. // If modules are enabled but there is no main module, Enabled returns true // and then the first use of module information will call die // (usually through MustModRoot). func Enabled() bool { … } func VendorDir() string { … } func inWorkspaceMode() bool { … } // HasModRoot reports whether a main module is present. // HasModRoot may return false even if Enabled returns true: for example, 'get' // does not require a main module. func HasModRoot() bool { … } // MustHaveModRoot checks that a main module or main modules are present, // and calls base.Fatalf if there are no main modules. func MustHaveModRoot() { … } // ModFilePath returns the path that would be used for the go.mod // file, if in module mode. ModFilePath calls base.Fatalf if there is no main // module, even if -modfile is set. func ModFilePath() string { … } func modFilePath(modRoot string) string { … } func die() { … } var ErrNoModRoot … type goModDirtyError … func (goModDirtyError) Error() string { … } var errGoModDirty … func loadWorkFile(path string) (workFile *modfile.WorkFile, modRoots []string, err error) { … } // ReadWorkFile reads and parses the go.work file at the given path. func ReadWorkFile(path string) (*modfile.WorkFile, error) { … } // WriteWorkFile cleans and writes out the go.work file to the given path. func WriteWorkFile(path string, wf *modfile.WorkFile) error { … } // UpdateWorkGoVersion updates the go line in wf to be at least goVers, // reporting whether it changed the file. func UpdateWorkGoVersion(wf *modfile.WorkFile, goVers string) (changed bool) { … } // UpdateWorkFile updates comments on directory directives in the go.work // file to include the associated module path. func UpdateWorkFile(wf *modfile.WorkFile) { … } // LoadModFile sets Target and, if there is a main module, parses the initial // build list from its go.mod file. // // LoadModFile may make changes in memory, like adding a go directive and // ensuring requirements are consistent. The caller is responsible for ensuring // those changes are written to disk by calling LoadPackages or ListModules // (unless ExplicitWriteGoMod is set) or by calling WriteGoMod directly. // // As a side-effect, LoadModFile may change cfg.BuildMod to "vendor" if // -mod wasn't set explicitly and automatic vendoring should be enabled. // // If LoadModFile or CreateModFile has already been called, LoadModFile returns // the existing in-memory requirements (rather than re-reading them from disk). // // LoadModFile checks the roots of the module graph for consistency with each // other, but unlike LoadModGraph does not load the full module graph or check // it for global consistency. Most callers outside of the modload package should // use LoadModGraph instead. func LoadModFile(ctx context.Context) *Requirements { … } func loadModFile(ctx context.Context, opts *PackageOpts) (*Requirements, error) { … } func errWorkTooOld(gomod string, wf *modfile.WorkFile, goVers string) error { … } // CreateModFile initializes a new module by creating a go.mod file. // // If modPath is empty, CreateModFile will attempt to infer the path from the // directory location within GOPATH. // // If a vendoring configuration file is present, CreateModFile will attempt to // translate it to go.mod directives. The resulting build list may not be // exactly the same as in the legacy configuration (for example, we can't get // packages at multiple versions from the same module). func CreateModFile(ctx context.Context, modPath string) { … } // fixVersion returns a modfile.VersionFixer implemented using the Query function. // // It resolves commit hashes and branch names to versions, // canonicalizes versions that appeared in early vgo drafts, // and does nothing for versions that already appear to be canonical. // // The VersionFixer sets 'fixed' if it ever returns a non-canonical version. func fixVersion(ctx context.Context, fixed *bool) modfile.VersionFixer { … } // AllowMissingModuleImports allows import paths to be resolved to modules // when there is no module root. Normally, this is forbidden because it's slow // and there's no way to make the result reproducible, but some commands // like 'go get' are expected to do this. // // This function affects the default cfg.BuildMod when outside of a module, // so it can only be called prior to Init. func AllowMissingModuleImports() { … } // makeMainModules creates a MainModuleSet and associated variables according to // the given main modules. func makeMainModules(ms []module.Version, rootDirs []string, modFiles []*modfile.File, indices []*modFileIndex, workFile *modfile.WorkFile) *MainModuleSet { … } // requirementsFromModFiles returns the set of non-excluded requirements from // the global modFile. func requirementsFromModFiles(ctx context.Context, workFile *modfile.WorkFile, modFiles []*modfile.File, opts *PackageOpts) *Requirements { … } type addToolchainRoot … const omitToolchainRoot … const withToolchainRoot … func directRequirements(modFiles []*modfile.File) map[string]bool { … } func rootsFromModFile(m module.Version, modFile *modfile.File, addToolchainRoot addToolchainRoot) (roots []module.Version, direct map[string]bool) { … } func appendGoAndToolchainRoots(roots []module.Version, goVersion, toolchain string, direct map[string]bool) []module.Version { … } // setDefaultBuildMod sets a default value for cfg.BuildMod if the -mod flag // wasn't provided. setDefaultBuildMod may be called multiple times. func setDefaultBuildMod() { … } func modulesTextIsForWorkspace(vendorDir string) (bool, error) { … } func mustHaveCompleteRequirements() bool { … } // addGoStmt adds a go directive to the go.mod file if it does not already // include one. The 'go' version added, if any, is the latest version supported // by this toolchain. func addGoStmt(modFile *modfile.File, mod module.Version, v string) { … } func forceGoStmt(modFile *modfile.File, mod module.Version, v string) { … } var altConfigs … func findModuleRoot(dir string) (roots string) { … } func findWorkspaceFile(dir string) (root string) { … } func findAltConfig(dir string) (root, name string) { … } func findModulePath(dir string) (string, error) { … } var importCommentRE … func findImportComment(file string) string { … } type WriteOpts … // WriteGoMod writes the current build list back to go.mod. func WriteGoMod(ctx context.Context, opts WriteOpts) error { … } var errNoChange … // UpdateGoModFromReqs returns a modified go.mod file using the current // requirements. It does not commit these changes to disk. func UpdateGoModFromReqs(ctx context.Context, opts WriteOpts) (before, after []byte, modFile *modfile.File, err error) { … } // commitRequirements ensures go.mod and go.sum are up to date with the current // requirements. // // In "mod" mode, commitRequirements writes changes to go.mod and go.sum. // // In "readonly" and "vendor" modes, commitRequirements returns an error if // go.mod or go.sum are out of date in a semantically significant way. // // In workspace mode, commitRequirements only writes changes to go.work.sum. func commitRequirements(ctx context.Context, opts WriteOpts) (err error) { … } // keepSums returns the set of modules (and go.mod file entries) for which // checksums would be needed in order to reload the same set of packages // loaded by the most recent call to LoadPackages or ImportFromFiles, // including any go.mod files needed to reconstruct the MVS result // or identify go versions, // in addition to the checksums for every module in keepMods. func keepSums(ctx context.Context, ld *loader, rs *Requirements, which whichSums) map[module.Version]bool { … } type whichSums … const loadedZipSumsOnly … const addBuildListZipSums … // modkey returns the module.Version under which the checksum for m's go.mod // file is stored in the go.sum file. func modkey(m module.Version) module.Version { … } func suggestModulePath(path string) string { … } func suggestGopkgIn(path string) string { … } func CheckGodebug(verb, k, v string) error { … }