In this tutorial, we are going to look at how you can use the
Dep tool in go
to manage your Go’s project dependencies.
dep tool is the “official experiment” dependency management tool for the
go programming language. It helps you to manage the ever-growing list of
dependencies your project needs to maintain without a lot of overhead and it can
pin you to specific versions of dependencies to ensure stability in your
Without a dependency management tool, you may find yourself in a lot of pain when it comes to developing multiple different Go programs on the same machine. You may find that updating a particular dependency that is used by 6 projects on your machine ends up breaking 3 of said projects due to a small API change.
Installation of the
dep tool can be done using homebrew, like so:
$ brew install dep $ brew upgrade dep
Once these 2 commands have been run, you should have the
dep CLI available to
you within your terminal.
When getting started with the
dep tool, the first thing you will typically
have to run is the
dep init command. This command does a lot of things and can
be run on existing Go projects as well as newer ones.
When you call
dep init, the tool does a few things:
- It identifies the dependencies of your current project
- It validates whether or not these dependencies use the
- It picks the highest compatible version for each of these dependencies
Creating a New Project
When it comes to creating a new project that relies upon
dep you have a few
options. The first and possibly best option is to create your project within
$GOPATH, much like you normally would,
cd into that directory and then
$ mkdir -p $GOPATH/src/github.com/my/project $ cd $GOPATH/src/github.com/my/project $ dep init $ ls Gopkg.toml Gopkg.lock vendor/
Gopkg.toml file is where you specify your dependencies and the particular
versions of these dependencies that you wish your project to use. Think of this
package.json if you are coming from a
NodeJS background, or your
pom.xml if you are coming from a
Gopkg.lock file is a transitively complete snapshot of your project’s
dependency graph that is expressed as a series of
In layman’s terms this is a list of every dependency and the particular revision of that dependency.
The vendor/ Directory
vendor/ directory is where your dependencies are stored. It’s the
equivalent to the
node_modules/ directory in your
dep command features 5 commands in total:
init- Sets up a new Go project
status- Reports the status of a project’s dependencies
ensure- Ensures a dependency is safely vendored in the project
prune- Prunes your dependencies, this is also done automatically by
version- Shows the dep version information
You’ll typically only work with the first 3 commands so I’ll just be covering these in more detail.
dep ensure command is quite possibly the most important command you will
need to come to grips with when it comes to working with the
If you want to add new dependencies to your project you can do so by calling the
dep ensure -add command and specifying the source for the project.
$ dep ensure -add github.com/foo/bar github.com/another/project ...
Should you wish to update some of the dependencies within your project you can
do that using the
-update flag when calling
// dry run testing an update $ dep ensure -update -n // non-dry run $ dep ensure -update // updates a specific package $ dep ensure -update github.com/gorilla/mux // updates to a specific version $ dep ensure -update firstname.lastname@example.org
dep status command reports the status of a project’s dependencies:
$ dep status // output ...
Hopefully, this tutorial has shown you everything you need to get started with
dep tool. If you require any further assistance then please do not
hesitate to let me know in the comments section below!
Note - If you want to keep track of when new Go articles are posted to the site, then please feel free to follow me on twitter for all the latest news: @Elliot_F.