Home > Article > Backend Development > How Do Dependencies Affect the Size of a Go Executable?
To gauge the size of a Go project that's a package imported into your own, there are ways to assess its footprint.
One method is to examine the $GOPATH/pkg directory, where library binaries reside. For instance, installing the gorilla/mux, gorilla/securecookie, and gorilla/sessions packages will yield binary sizes in the $GOPATH/pkg/darwin_amd64/github.com/gorilla/ directory.
$ cd $GOPATH/pkg/darwin_amd64/github.com/gorilla/ $ du -k * 284 mux.a 128 securecookie.a 128 sessions.a
However, library size isn't the sole indicator of its impact on your executable size after linking. Dependencies within packages can introduce additional "baggage," which may or may not be shared by other imports.
To illustrate this variability, consider these three programs: empty.go, http.go, and mux.go.
// empty.go package main func main() {}
// http.go package main import "net/http" var _ = http.Serve func main() {}
// mux.go package main import "github.com/gorilla/mux" var _ = mux.NewRouter func main() {}
Despite their functional equivalence, their binary sizes differ significantly:
$ du -k * 1028 empty 5812 http 5832 mux
The addition of the net/http import in http.go dramatically increases its size, while the use of the gorilla/mux package in mux.go only marginally increases it.
This is because the mux package depends on the net/http package, so it inherits its dependencies. The linker may eliminate some of this additional baggage during compilation, but it's not straightforward to calculate the true footprint of a package.
Conclusion: Identifying a package's sub-dependencies is crucial for accurately assessing its impact on the size of your executable. Simply adding up package library sizes doesn't provide a complete picture.
The above is the detailed content of How Do Dependencies Affect the Size of a Go Executable?. For more information, please follow other related articles on the PHP Chinese website!