This blog post is about how we added package versioning to Go, in the form of Go modules, and the reasons we made the choices we did. It is adapted and updated from a talk I gave at GopherCon Singapore in 2018. Why Versions? To start, let’s make sure we’re all on the same page, by taking a look at the ways the GOPATH-based go get breaks. Suppose we have a fresh Go installation and we want to write