Binários compilados com Go incorporam metadados sobre dependências e configurações de build. Com o comando go version -m, é possível extrair essas informações diretamente de um binário, mesmo sem o código-fonte.
Casos de uso
- Verificar dependências incluídas em um binário rodando em produção
- Confirmar se bibliotecas vulneráveis estão incluídas
- Validar configurações de build como
GOOSeGOARCH - Identificar de qual commit um binário foi gerado
Uso
go version -m <caminho-do-binario>Como ler a saída
A saída é dividida em várias seções.
| Prefixo | Significado |
|---|---|
path | Caminho de importação do módulo |
mod | Módulo principal. (devel) indica build local/de desenvolvimento |
dep | Módulo de dependência com versão e checksum |
build | Configurações de build e informações de VCS |
Chaves importantes na seção build:
| Chave | Descrição |
|---|---|
-compiler | Compilador usado (normalmente gc) |
CGO_ENABLED | Se o CGO está habilitado |
GOOS / GOARCH | SO alvo / arquitetura alvo |
vcs.revision | Hash do commit usado no build |
vcs.time | Timestamp do commit |
vcs.modified | Se havia mudanças não commitadas no momento do build |
Exemplo
go version -m ./output./output: go1.19 path github.com/mktbsh/output mod github.com/mktbsh/output (devel) dep github.com/aws/aws-lambda-go v1.34.1 h1:M3a/uFYBjii+... dep github.com/labstack/echo/v4 v4.7.2 h1:Kv2/p8OaQ+M6... ... build -compiler=gc build CGO_ENABLED=0 build GOARCH=amd64 build GOOS=linux build vcs.revision=39792fdacec6dc82b3f6335cb6b921c138f37625 build vcs.time=2022-08-18T08:50:08Z build vcs.modified=trueNeste exemplo, o binário foi compilado para Linux/amd64, com CGO desabilitado, a partir do commit 39792fd..., com alterações não commitadas presentes (vcs.modified=true).
Relacionado
go version- Verificar a versão do Gogo list -m all- Listar dependências a partir do código-fonte
hsb.horse