govendor is a Go package dependency management command line tool based on the
vendormechanism. Non-intrusive integration with native vendors, and also supports migration from other dependency management tools. It can easily realize the development and management of different versions of the same package in different projects without mutual intrusion.
At the beginning, Go did not provide a more appropriate package management tool. The vendor feature is provided starting from version 1.5, but the environment variableGO15VENDOREXPERIMENT=1needs to be set manually.
When executing thego buildorgo runcommand, the package will be searched in the following order:
When version 1.6 was released, the value of this environment variable was set to 1 by default. This value can be viewed using thego envcommand.
When version 1.7 was released, this environment variable was removed and thevendorfeature was enabled by default.
packagethat does not containmain) should not store external files in its own version control The packages are in thevendordirectory, unless there is a special reason and you know why you want to do this.In an application, (packagecontainingmain), it is recommended that there is only onevendordirectory, and it is located in the code base level directory.
Related tutorials:go video tutorial
govendor is a directory based onvendorMechanical package management tool.
$GOPATHto thevendordirectory of the projectvendor/vendor.jsonfor package and version management, which is similar to PHP'sComposergovendor add/ The updatecommand copies the dependent package from$GOPATHvendor/*/file is ignored, you can usegovendor syncto restore the dependency Packagegovendor fetchto add or update dependent packagesgovendor migratefrom othervendorpackage management tools One-click migration togovendor:
$GOPATH/srcdirectoryset GO15VENDOREXPERIMENT=1go get -u github.com/kardianos/govendor
For convenience and quick usegovendor, it is recommended to add$GOPATH/binto PATH. Linux/macOS settings are as follows:
export PATH="$GOPATH/bin:$PATH"
Execute the following command in the project root directory forvendorInitialization:
govendor init
In the project root directory, that is Thevendordirectory andvendor.jsonfile will be automatically generated. At this time, the content of thevendor.jsonfile is:
{ "comment": "", "ignore": "test", "package": [], "rootPath": "govendor-example" }
$GOPATHCopy the package to thevendordirectorygovendor add +external
$GOPATHgovendor add gopkg.in/yaml.v2
govendor list
e github.com/gin-contrib/sse e github.com/gin-gonic/gin e github.com/gin-gonic/gin/binding e github.com/gin-gonic/gin/internal/json e github.com/gin-gonic/gin/render e github.com/golang/protobuf/proto e github.com/mattn/go-isatty e github.com/ugorji/go/codec e gopkg.in/go-playground/validator.v8 e gopkg.in/yaml.v2 pl govendor-example m github.com/json-iterator/go m golang.org/x/sys/unix
govendor list -v fmt
s fmt ├── e github.com/gin-contrib/sse ├── e github.com/gin-gonic/gin ├── e github.com/gin-gonic/gin/render ├── e github.com/golang/protobuf/proto ├── e github.com/ugorji/go/codec ├── e gopkg.in/go-playground/validator.v8 ├── e gopkg.in/yaml.v2 └── pl govendor-example
$GOPATH)govendor fetch golang.org/x/net/context
govendor fetch golang.org/x/net/context@a4bbce9fcae005b22ae5443f6af064d80a6f5a55 govendor fetch golang.org/x/net/context@v1 # Get latest v1.*.* tag or branch. govendor fetch golang.org/x/net/context@=v1 # Get the tag or branch named "v1".
vendordirectory)govendor fmt +local
govendor install +local
govendor test +local
vendorpackagesgovendor install +vendor,^program
vendordirectory (including$GOPATHexisting or non-existing packages)govendor fetch +out
vendordirectory, but I want to update it from$GOPATHgovendor update +vendor
$GOPATHNow I want to update the modified and uncommitted package tovendorgovendor update -uncommitted
govendor fetch github.com/normal/pkg::github.com/myfork/pkg
will now pull the code frommyforkinstead ofnormal.
vendor.jsonrecords the dependency package information, how to pull updatesgovendor sync
each For detailed usage of subcommands, you can check how the source code package is implemented throughgovendor COMMAND -hor readgithub.com/kardianos/govendor/context.
| Subcommand | Function |
|---|---|
| Create | vendordirectory andvendor.jsonfile |
| List & filter dependent packages and their status | |
| Copy the package from | $GOPATHto the projectvendordirectory |
| Update dependency packages to project | vendorfrom$GOPATHDirectory |
| from | vendorDirectory to remove dependent packages |
| List all missing, expired and modified packages | |
| Add or update packages from the remote repository to the project | vendordirectory (will not be stored in$GOPATH) |
| Pull matching packages to the | vendordirectory based onvendor.json#migrate | One-click migration from other package management tools based on
get | is similar to
|
| $GOPATH | , and then copy the dependent package to thevendordirectorylicense | List all dependencies The LICENSE
| shell | of the package can run multiple |
govendor Status Parameter |
| local | ||
|---|---|---|
| external | e | |
| GOPATH | but not in the projectvendor | directoryvendor | v
| vendor | directorystd | s
|
| excluded | x | |
| unused | u | |
| vendor | directory, but not referenced in the project## missingm |
|
| program | p | |
| outside | ||
| external missing | all |
|
| list | 、
、remove、fetchGo modulesPudaxiben What's interesting is that starting from Go version 1.11, the official has built in more powerful Go modules to unify the chaotic situation of Go package dependency management for many years (the dep tool previously launched by Go officials was almost stillborn), and will be released in 1.13 It is officially enabled by default in this version.It has been favored and strongly recommended by the community, and it is recommended that new projects use Go modules.
The above is the detailed content of A brief discussion on govendor, the Go package dependency management tool. For more information, please follow other related articles on the PHP Chinese website!