створити файл з іменем 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.
Ви можете побачити тут і тут .