Compilando Código Go
Compilando Código Go⌗
Go oferece muitas vantagens para desenvolvedores, especialmente em termos de eficiência e portabilidade.
Como Go é uma linguagem compilada, vale a pena falarmos um pouco sobre esse processo e o que ele significa. Além de como fazer, e mostrar alguns exemplos!
Fundamentos⌗
O processo de compilação segue esta sequência:
CÓDIGO -> COMPILADOR GO -> LINGUAGEM DE MÁQUINA -> LINKING -> EXECUTÁVEL
Comandos básicos de compilação:
go run main.go
: Compila e executa o arquivo.go build
: Compila o código e gera um executável.
Uma característica notável do Go é a facilidade de compilação cruzada - isso é, para diferentes sistemas operacionais e arquiteturas a partir de uma única máquina.
Variáveis importantes:
GOOS
: Define o sistema operacional alvo (ex: linux, windows, darwin)GOARCH
: Especifica a arquitetura alvo (ex: amd64, 386, arm)
Exemplo de comando:
GOOS=windows GOARCH=amd64 go build
Algumas outras vantagens que temos ao usar Go é que…
- Os binários (executáveis gerados) são autocontidos: Incluem a maioria das dependências necessárias.
- Compilação eficiente: Processo rápido, e o compilador é extremamente útil para entender erros no nosso programa.
- Suporte multiplataforma: Facilita o desenvolvimento para diferentes sistemas operacionais.
Aplicações Práticas⌗
1. Distribuição de Aplicativos⌗
Go permite compilar aplicativos para múltiplas plataformas facilmente:
GOOS=linux GOARCH=amd64 go build -o app-linux-amd64
GOOS=darwin GOARCH=arm64 go build -o app-mac-arm64
GOOS=windows GOARCH=amd64 go build -o app-windows-amd64.exe
2. Desenvolvimento de Microserviços⌗
Exemplo de Dockerfile para criar containers leves:
FROM golang:1.22 as builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o main .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=builder /app/main .
CMD ["./main"]
3. Desenvolvimento Multiplataforma⌗
Script para compilar para múltiplas plataformas:
#!/bin/bash
platforms=("windows/amd64" "darwin/amd64" "linux/amd64")
for platform in "${platforms[@]}"
do
platform_split=(${platform//\// })
GOOS=${platform_split[0]}
GOARCH=${platform_split[1]}
output_name='app-'$GOOS'-'$GOARCH
if [ $GOOS = "windows" ]; then
output_name+='.exe'
fi
env GOOS=$GOOS GOARCH=$GOARCH go build -o $output_name
if [ $? -ne 0 ]; then
echo 'Falha na compilação para '${GOOS}' '${GOARCH}
exit 1
fi
done
4. Desenvolvimento para IoT⌗
Compilação para dispositivos embarcados:
GOOS=linux GOARCH=arm GOARM=7 go build -ldflags="-s -w" -o iot-app
5. Criação de Plugins⌗
Compilação de plugins:
go build -buildmode=plugin -o myplugin.so myplugin.go