Rozważ następujący program:
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
Jeśli zbuduję to na mojej maszynie Linux AMD64 (Go 1.9), na przykład:
$ go build
$ ls -la helloworld
-rwxr-xr-x 1 janf group 2029206 Sep 11 16:58 helloworld
Otrzymuję plik binarny o rozmiarze około 2 Mb.
Powodem tego (co zostało wyjaśnione w innych odpowiedziach) jest to, że używamy pakietu „fmt”, który jest dość duży, ale plik binarny również nie został usunięty, co oznacza, że tablica symboli nadal istnieje. Jeśli zamiast tego poinstruujemy kompilator, aby usunął plik binarny, stanie się on znacznie mniejszy:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 1323616 Sep 11 17:01 helloworld
Jeśli jednak przepiszemy program, aby używał wbudowanej funkcji print, zamiast fmt.Println, na przykład:
package main
func main() {
print("Hello World!\n")
}
A następnie skompiluj to:
$ go build -ldflags "-s -w"
$ ls -la helloworld
-rwxr-xr-x 1 janf group 714176 Sep 11 17:06 helloworld
Otrzymujemy jeszcze mniejszy plik binarny. Jest to tak małe, jak możemy to uzyskać bez uciekania się do sztuczek, takich jak pakowanie UPX, więc narzut czasu wykonywania Go wynosi około 700 Kb.