создайте файл с именем main.go
, давайте попробуем с простой программой hello world.
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
Я использую версию go 1.9.1
$ go version
go version go1.9.1 linux/amd64
Компиляция со стандартным go build
команда.
$ go build main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.8M Oct 27 07:47 main
Давайте снова скомпилируем с go build
, но с ldflags
, как предложено выше,
$ go build -ldflags "-s -w" main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.2M Oct 27 08:15 main
Размер файла уменьшен на 30%.
Теперь давайте используем gccgo
,
$ go version
go version go1.8.1 gccgo (GCC) 7.2.0 linux/amd64
Строительство идет с gccgo
,
$ go build main.go
$ ls -lh
-rwxr-xr-x 1 nil nil 34K Oct 27 12:18 main
Двоичный размер уменьшен почти на 100%.Давайте еще раз попробуем построить наши main.go
с gccgo
, но с флагами сборки,
$ go build -gccgoflags "-s -w" main.go
-rwxr-xr-x 1 nil nil 23K Oct 27 13:02 main
Предупреждение: Поскольку gccgo
двоичные файлы были динамически связаны.Если у вас есть бинарный файл очень большого размера, ваш бинарный файл при компиляции с gccgo не будет уменьшен на 100%, но будет значительно уменьшен в размере.
По сравнению с gc, gccgo медленнеекомпилировать код, но поддерживает более мощные оптимизации, поэтому программа с привязкой к процессору, созданная gccgo, будет обычно работать быстрее.Доступны все оптимизации, реализованные в GCC за прошедшие годы, включая встраивание, оптимизацию цикла, векторизацию, планирование команд и многое другое.Хотя это не всегда дает лучший код, в некоторых случаях программы, скомпилированные с помощью gccgo, могут работать на 30% быстрее.
Ожидается, что релизы GCC 7 будут включать полную реализацию пользовательских библиотек Go 1.8.Как и в более ранних выпусках, среда выполнения Go 1.8 объединена не полностью, но это не должно быть видно программам Go.
Плюсы:
- Уменьшенный размер
- Оптимизировано.
Минусы
- Медленно
- Невозможно использовать последнюю версию
go
.
Вы можете увидеть более здесь и здесь .