создайте файл с именем 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
.
Вы можете увидеть здесь и здесь .