A project's dependencies are declared in the go.mod file. This is where the modules are stored when you do
go get <module name>. You can remove unused dependencies using
go mod tidy and your go.mod will only include all used imports.
When you clone a Go project from github, for example, you'll want to run
go get to install all of the dependencies declared in the go.mod file. If you're coming from a background in web development, this is similar to how you run
npm install to install all of the dependencies declared in your
You may see some dependencies in your go.mod file that are indirect (denoted by
// indirect). This means that one of your dependencies doesn't have its own go.mod file, so, the dependencies that it imports are included in your project's go.mod file.
Let's say we're building a Twitch bot, we need
github.com/gempir/go-twitch-irc/v2, but it doesn't have a go.mod file and it uses functions from
github.com/gempir/go-twitch-irc. You would then have
github.com/gempir/go-twitch-irc // indirect in your project's go.mod file.
note: the above is a hypothetical scenario, you won't actually have any indirect dependencies with github.com/gempir/go-twitch-irc/v2
go.sum includes the checksum for the dependencies to make sure that you're installing the exact same dependency as the author used.
To create a new Go project where you can have a go.mod file, you need to set it up on your GOPATH with a name for your project.
go mod init <module name>
Your module name can be your project name or it can be a link to your github repo, just remove the https:// portion of the url.
You need to run
go mod init before you're able to get dependencies for your project with