How Do Dependencies Affect the Size of a Go Executable?

DDD
Release: 2024-11-17 03:31:03
Original
402 people have browsed it

How Do Dependencies Affect the Size of a Go Executable?

Determining the Size of a Go Project

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
Copy after login

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() {}
Copy after login
// http.go
package main

import "net/http"

var _ = http.Serve

func main() {}
Copy after login
// mux.go
package main

import "github.com/gorilla/mux"

var _ = mux.NewRouter

func main() {}
Copy after login

Despite their functional equivalence, their binary sizes differ significantly:

$ du -k *

1028    empty
5812    http
5832    mux
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template