Difference Between “go get” and “go install” in Go

Chaewonkong
2 min readJun 6, 2023

--

go get and go install are common command to install packages in Go.

When working with the Go programming language, developers often come across two important commands: go get and go install. While both commands are related to managing dependencies and building packages, they have distinct purposes. In this article, we will explore the differences between these two commands and understand when to use each of them.

go get

Fetching and Updating Remote Packages The go get command is primarily used for retrieving remote packages from version control repositories and making them available for use in your projects.When you run go get, Go downloads the source code of the package and its dependencies within your workspace's bin and pkg directories. Additionally, go get can also update packages to their latest versions if you have already installed them.

go install

The go install command operates on the local codebase residing in your development environment. It compiles and installs the package present in your local code repository (typically in the GOPATH). If the package has not been fetched yet or if there are updates available, go install will fetch the necessary remote packages and their dependencies, compile them, and install the resulting binaries in the appropriate location within your workspace's bin directory. Therefore, go install can fetch remote packages if required.

For installing executables, go get is deprecated since go 1.17 and go install is the only viable option to acquire executables.

Conclusion

When developing applications with Go, utilizing Go modules for package and dependency management is a common practice. This involves working with go.mod and go.sum files and using the go get command to install dependencies. However, there is also a specific use case for go install: installing an executable locally to run it independently in your environment. By understanding the appropriate use of these commands, developers can streamline their development workflow, effectively manage dependencies, and ensure the smooth integration of packages into their Go projects.

--

--