Betrachten Sie das folgende Programm:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
Wenn ich dies auf meinem Linux AMD64-Computer (Go 1.9) baue, gehen Sie wie folgt vor:
$ go build
$ ls -la helloworld
-rwxr-xr-x 1 janf group 2029206 Sep 11 16:58 helloworld
Ich bekomme eine Binärdatei mit einer Größe von ca. 2 MB.
Der Grund dafür (was in anderen Antworten erklärt wurde) ist, dass wir das "fmt" -Paket verwenden, das ziemlich groß ist, aber die Binärdatei wurde auch nicht entfernt und dies bedeutet, dass die Symboltabelle noch vorhanden ist. Wenn wir stattdessen den Compiler anweisen, die Binärdatei zu entfernen, wird sie viel kleiner:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 1323616 Sep 11 17:01 helloworld
Wenn wir das Programm jedoch neu schreiben, um die integrierte Funktion print anstelle von fmt.Println zu verwenden, gehen Sie wie folgt vor:
package main
func main() {
print("Hello World!\n")
}
Und dann kompiliere es:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 714176 Sep 11 17:06 helloworld
Am Ende haben wir eine noch kleinere Binärdatei. Dies ist so klein wie möglich, ohne auf Tricks wie UPX-Packing zurückgreifen zu müssen. Der Overhead der Go-Laufzeit beträgt also ungefähr 700 KB.