utwórz plik o nazwie main.go
, spróbujmy z prostym programem hello world.
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
Używam go w wersji 1.9.1
$ go version
go version go1.9.1 linux/amd64
Skompiluj za pomocą standardowego go build
polecenia.
$ go build main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.8M Oct 27 07:47 main
Skompilujmy ponownie z, go build
ale z ldflags
jak zasugerowano powyżej,
$ go build -ldflags "-s -w" main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.2M Oct 27 08:15 main
Rozmiar pliku zostaje zmniejszony o 30%.
Teraz użyjmy gccgo
,
$ go version
go version go1.8.1 gccgo (GCC) 7.2.0 linux/amd64
Budowanie iść z gccgo
,
$ go build main.go
$ ls -lh
-rwxr-xr-x 1 nil nil 34K Oct 27 12:18 main
Rozmiar binarny został zmniejszony o prawie 100%. Chodźmy znów próbować budować nasz main.go
z gccgo
ale z wbudowanym flagami,
$ go build -gccgoflags "-s -w" main.go
-rwxr-xr-x 1 nil nil 23K Oct 27 13:02 main
Ostrzeżenie:
Asgccgo
pliki binarne zostały połączone dynamicznie. Jeśli masz plik binarny, który jest bardzo duży, twój plik binarny po kompilacji za pomocą gccgo nie zostanie zmniejszony o 100%, ale zostanie znacznie zmniejszony.
W porównaniu z gc, gccgo wolniej kompiluje kod, ale obsługuje bardziej zaawansowane optymalizacje, więc program związany z procesorem zbudowany przez gccgo będzie zwykle działał szybciej. Dostępne są wszystkie optymalizacje wdrożone w GCC na przestrzeni lat, w tym wstawianie, optymalizacje pętli, wektoryzacja, planowanie instrukcji i inne. Chociaż nie zawsze tworzy lepszy kod, w niektórych przypadkach programy skompilowane za pomocą gccgo mogą działać 30% szybciej.
Oczekuje się, że wydania GCC 7 będą zawierać pełną implementację bibliotek użytkownika Go 1.8. Podobnie jak w przypadku wcześniejszych wydań, środowisko wykonawcze Go 1.8 nie jest w pełni scalone, ale nie powinno to być widoczne dla programów Go.
Plusy:
- Zmniejszony rozmiar
- Zoptymalizowany.
Cons
- Powolny
- Nie można użyć najnowszej wersji
go
.
Możesz zobaczyć tutaj i tutaj .