cree un archivo llamado main.go
, intentemos con un programa simple de hola mundo.
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
Yo uso go versión 1.9.1
$ go version
go version go1.9.1 linux/amd64
Compile con go build
comando estándar .
$ go build main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.8M Oct 27 07:47 main
Compilemos una vez más con go build
pero con ldflags
como se sugirió anteriormente,
$ go build -ldflags "-s -w" main.go
$ ls -lh
-rwxr-xr-x-x 1 nil nil 1.2M Oct 27 08:15 main
El tamaño del archivo se reduce en un 30%.
Ahora, usemos gccgo
,
$ go version
go version go1.8.1 gccgo (GCC) 7.2.0 linux/amd64
La construcción de ir con gccgo
,
$ go build main.go
$ ls -lh
-rwxr-xr-x 1 nil nil 34K Oct 27 12:18 main
El tamaño binario se reduce casi en un 100%. Intentemos una vez más construir nuestro main.go
con gccgo
pero con banderas de compilación,
$ go build -gccgoflags "-s -w" main.go
-rwxr-xr-x 1 nil nil 23K Oct 27 13:02 main
Advertencia:
ya que los gccgo
binarios se vincularon dinámicamente. Si tiene un binario que es muy grande en tamaño, su binario cuando se compila con gccgo no se reducirá en un 100%, pero se reducirá en tamaño en una cantidad considerable.
En comparación con gc, gccgo es más lento para compilar código pero admite optimizaciones más potentes, por lo que un programa vinculado a la CPU creado por gccgo generalmente se ejecutará más rápido. Todas las optimizaciones implementadas en GCC a lo largo de los años están disponibles, incluida la inserción, las optimizaciones de bucle, la vectorización, la programación de instrucciones y más. Si bien no siempre produce un mejor código, en algunos casos los programas compilados con gccgo pueden ejecutarse un 30% más rápido.
Se espera que las versiones de GCC 7 incluyan una implementación completa de las bibliotecas de usuario de Go 1.8. Al igual que con versiones anteriores, el tiempo de ejecución de Go 1.8 no está completamente combinado, pero eso no debería ser visible para los programas de Go.
Pros:
- Tamaño reducido
- Optimizado.
Contras
- Lento
- No se puede utilizar la última versión de
go
.
Puedes ver aquí y aquí .