Optimize Go binary size

๐Ÿ“… Tue, Mar 1, 2016 โฑ๏ธ One-minute read

~21MB

Well, I found yesterday that LogPacker Daemon weights about 21MB. This application is written in Go language, it’s really doing a lot of things, has built-in connectors to different Data-Storages, has Cluster solution inside, etc.

Some people are complaining about huge size of Go compiled binaries. But it makes sence, Go includes debugging information into binary for GDB.

go build logpacker_daemon.go && du -h logpacker_daemon
21M	logpacker_daemon

~15MB

We distribute this binary to our customers, and they do not need to debug this tool, so I decided to turn off it.

Omit the DWARF symbol table during the build process:

go build -ldflags="-w"

The -s ldflag will omit the symbol table and debugging information when building your executable:

go build -ldflags="-s"

Result:

go build -ldflags="-w -s" logpacker_daemon.go && du -h logpacker_daemon
15M	logpacker_daemon

Conclusion

This optimization doesn’t affect program, so feel free to use it in production if you you donโ€™t intend on using the debug symbols.