Skip to content

Files

src

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Mar 11, 2025
Oct 12, 2022
Feb 7, 2025
Dec 30, 2024
Mar 25, 2025
Mar 28, 2025
Mar 11, 2025
Mar 7, 2025
Jan 31, 2024
Mar 5, 2025
Mar 20, 2025
Feb 10, 2025
Mar 14, 2025
Dec 5, 2024
Mar 14, 2025
Sep 30, 2024
Apr 26, 2024
Feb 28, 2025
Dec 17, 2024
Mar 27, 2025
Dec 2, 2024
Mar 17, 2025
Nov 20, 2024
May 23, 2024
Mar 28, 2025
Feb 15, 2025
Dec 27, 2024
Mar 26, 2025
Nov 21, 2024
Mar 24, 2025
Mar 12, 2025
Mar 26, 2025
Mar 28, 2025
Feb 19, 2025
Aug 9, 2024
Mar 17, 2025
Sep 3, 2024
Mar 27, 2025
Dec 21, 2024
Dec 3, 2024
Feb 25, 2025
Mar 20, 2025
May 20, 2024
Mar 5, 2025
Mar 13, 2025
Oct 1, 2018
Mar 26, 2025
Mar 7, 2025
Mar 18, 2025
Feb 25, 2025
Feb 24, 2025
Jul 11, 2024
Mar 4, 2025
Mar 28, 2025
Feb 8, 2012
Sep 30, 2024
Mar 11, 2024
Feb 11, 2025
Apr 20, 2020
Jan 20, 2023
Apr 23, 2024
Feb 26, 2020
Feb 11, 2025
Jun 18, 2015
Jul 20, 2023
Mar 4, 2025
Mar 4, 2025
Aug 20, 2024
Feb 12, 2025
Nov 14, 2024
May 4, 2022
Feb 12, 2025
May 15, 2024
Feb 11, 2025
Aug 17, 2022
Vendoring in std and cmd
========================

The Go command maintains copies of external packages needed by the
standard library in the src/vendor and src/cmd/vendor directories.

There are two modules, std and cmd, defined in src/go.mod and
src/cmd/go.mod. When a package outside std or cmd is imported
by a package inside std or cmd, the import path is interpreted
as if it had a "vendor/" prefix. For example, within "crypto/tls",
an import of "golang.org/x/crypto/cryptobyte" resolves to
"vendor/golang.org/x/crypto/cryptobyte". When a package with the
same path is imported from a package outside std or cmd, it will
be resolved normally. Consequently, a binary may be built with two
copies of a package at different versions if the package is
imported normally and vendored by the standard library.

Vendored packages are internally renamed with a "vendor/" prefix
to preserve the invariant that all packages have distinct paths.
This is necessary to avoid compiler and linker conflicts. Adding
a "vendor/" prefix also maintains the invariant that standard
library packages begin with a dotless path element.

The module requirements of std and cmd do not influence version
selection in other modules. They are only considered when running
module commands like 'go get' and 'go mod vendor' from a directory
in GOROOT/src.

Maintaining vendor directories
==============================

Before updating vendor directories, ensure that module mode is enabled.
Make sure that GO111MODULE is not set in the environment, or that it is
set to 'on' or 'auto', and if you use a go.work file, set GOWORK=off.

Also, ensure that 'go env GOROOT' shows the root of this Go source
tree. Otherwise, the results are undefined. It's recommended to build
Go from source and use that 'go' binary to update its source tree.

Requirements may be added, updated, and removed with 'go get'.
The vendor directory may be updated with 'go mod vendor'.
A typical sequence might be:

    cd src  # or src/cmd
    go get golang.org/x/net@master
    go mod tidy
    go mod vendor

Use caution when passing '-u' to 'go get'. The '-u' flag updates
modules providing all transitively imported packages, not only
the module providing the target package.

Note that 'go mod vendor' only copies packages that are transitively
imported by packages in the current module. If a new package is needed,
it should be imported before running 'go mod vendor'.