go build, run, install & clean
Estos cuatro comandos cubren cómo Go convierte el código fuente en binarios, los ejecuta localmente, instala herramientas globalmente y restablece las cachés al depurar compilaciones obsoletas.
Busca en todas las páginas de la documentación
Estos cuatro comandos cubren cómo Go convierte el código fuente en binarios, los ejecuta localmente, instala herramientas globalmente y restablece las cachés al depurar compilaciones obsoletas.
go build compila paquetes en artefactos que distribuyes.
go run es un atajo de desarrollo que compila a un archivo temporal y lo ejecuta inmediatamente.
go install coloca los binarios de comandos en tu PATH a través de GOBIN o GOPATH/bin.
go clean elimina las salidas de compilación y las entradas de caché cuando necesitas una reconstrucción en frío.
Los cuatro comparten el mismo cargador de paquetes y respetan las etiquetas de compilación, GOOS, GOARCH y la configuración de módulos.
Tarjeta de referencia rápida - lista para copiar y pegar.
# Compila un binario de servicio con flags enfocados en el tamaño
go build -trimpath -ldflags="-s -w" -o bin/api ./cmd/api
# Ejecuta localmente con argumentos
go run ./cmd/api --addr :8080
# Instala una herramienta CLI en la versión del módulo en go.mod
go install golang.org/x/tools/cmd/goimports@latest
# Limpia la caché de resultados de pruebas después de arreglar una prueba inestable
go clean -testcacheCuándo usar esto:
go build para artefactos de lanzamiento, imágenes de Docker y binarios de CI.go run para una iteración rápida en paquetes main.go install para herramientas de desarrollador (goimports, staticcheck, CLIs de generación de código).go clean -cache solo cuando diagnostiques aciertos de caché corruptos o imposibles.# Diseño del módulo:
# .
# ├── go.mod
# ├── cmd/seed/main.go
# └── internal/seed/seed.go
go build -o bin/seed ./cmd/seed
./bin/seed --count 5
go run ./cmd/seed --count 3
go install ./cmd/seed # instala en $(go env GOPATH)/bin o GOBIN
go clean -i ./cmd/seed # elimina el binario instalado para esta ruta de importación// cmd/seed/main.go
package main
import (
"flag"
"fmt"
"example.com/tooldemo/internal/seed"
)
func main() {
n := flag.Int("count", 1, "registros a crear")
flag.Parse()
fmt.Println(seed.Generate(*n))
}// internal/seed/seed.go
package seed
import "fmt"
func Generate(n int) string {
return fmt.Sprintf("generados %d registros", n)
}Lo que esto demuestra:
go build -o nombra la salida explícitamente para scripts de despliegue.go run acepta la misma ruta de paquete y reenvía flags después de -- cuando es necesario.go install con un ./cmd/seed relativo instala desde el módulo actual sin un go get separado.go clean -i elimina el binario instalado que coincide con la ruta de importación de ese paquete.go run enlaza a un ejecutable temporal en el directorio temporal del sistema operativo y lo elimina después de salir (a menos que -work deje los intermediarios para inspección).go install omite la copia al directorio actual; solo actualiza el destino de instalación.| Flag | Efecto |
|---|---|
-o path | Nombre del archivo de salida (build) |
-trimpath | Elimina rutas de sistema de archivos de las posiciones registradas |
-ldflags "..." | Pasa flags al enlazador (-s -w elimina información de depuración) |
-tags list | Habilita etiquetas de compilación separadas por comas |
-race | Habilita el detector de carreras (build/test) |
-mod vendor | Lee dependencias de vendor/ |
-a | Fuerza la reconstrucción de todos los paquetes (ignora caché) |
go clean| Invocación | Elimina |
|---|---|
go clean | Artefactos de compilación en el directorio del paquete actual |
go clean -cache | Caché de compilación completa (GOCACHE) |
go clean -testcache | Resultados de éxito/fallo en caché de go test |
go clean -modcache | Módulos descargados (GOMODCACHE) |
go clean -i pkg... | Binarios/archivos de instalación para paquetes |
# Inspecciona dónde van los artefactos
go env GOCACHE GOMODCACHE GOPATH GOBIN
# Imprime el ID de compilación invocado por el enlazador incrustado en los binarios
go tool buildid bin/seedgo run en scripts de producción - compila en cada invocación y oculta la ruta del artefacto. Solución: go build una vez, ejecuta el binario.-o en CI - los nombres de salida predeterminados colisionan al compilar múltiples comandos en un solo directorio. Solución: siempre establece -o bin/<nombre>.go install sin una versión fuera de un módulo - @latest puede adelantarse a los pines de CI. Solución: ejecuta desde un módulo con un require registrado o fija @v1.2.3.go clean -modcache en CI compartida - fuerza la redescarga completa y ralentiza cada trabajo. Solución: haz caché de GOMODCACHE entre ejecuciones; limpia solo ante errores de corrupción.GOOS/GOARCH. Solución: deshabilita cgo (CGO_ENABLED=0) o instala el compilador cruzado correspondiente.-trimpath - los panics todavía incluyen nombres de funciones; solo se recortan las rutas de archivo. Solución: sube símbolos por separado si necesitas depuración a nivel de ruta.| Alternativa | Usar Cuando | No Usar Cuando |
|---|---|---|
Envoltorios make / just | Los equipos quieren objetivos nombrados (make test) | El envoltorio oculta los flags de go que necesitas aprender |
goreleaser | Lanzamientos multiplataforma con archivos y checksums | Un solo go build para un despliegue en Linux es suficiente |
| Bazel / Buck | Compilaciones herméticas a gran escala | Módulos pequeños donde go build ya es rápido |
go run | Iteración local en main | Contenedores de producción o unidades systemd |
La información de depuración y las tablas de símbolos añaden tamaño.
Usa -ldflags="-s -w" y -trimpath para compilaciones de lanzamiento.
La compresión UPX rara vez vale la pena por los falsos positivos del antivirus.
En GOBIN si está configurado, de lo contrario en GOPATH/bin.
Asegúrate de que ese directorio esté en tu PATH.
Fuerza la reconstrucción de todos los paquetes incluso cuando existen aciertos de caché.
Úsalo con moderación; va en contra de la compilación incremental.
Pasa múltiples rutas de paquete: go build -o bin/a ./cmd/a -o bin/b ./cmd/b no funciona como una sola invocación.
Compila cada main por separado o usa un pequeño bucle de shell.
No.
Elimina archivos objeto, archivos de archivo en caché, binarios instalados y directorios de caché - nunca el código fuente .go.
-trimpath elimina las rutas en tiempo de compilación.
Combina con alojamiento de módulos privados y GOPRIVATE para privacidad en tiempo de obtención.
Compila y enlaza en cada invocación.
Sigue usándolo para desarrollo; cambia a go build para ejecuciones repetidas del mismo código.
El directorio que almacena las salidas de las acciones de compilación indexadas por las entradas.
Hace que las compilaciones incrementales sean rápidas y es seguro eliminarlo al solucionar problemas.
Sí.
GOOS=linux GOARCH=arm64 go build compila cruzadamente; las mismas variables de entorno se aplican a go install.
Habilítalo para binarios de prueba (go test -race) con más frecuencia que para binarios de producción.
Los binarios con detección de carreras son más lentos y necesitan más memoria.
Versiones de Stack: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, go fix modernizadores - verifica el parche en la compilación), chi (última - verifica en la compilación), gin (última - verifica en la compilación), echo (última - verifica en la compilación), google.golang.org/grpc (última - verifica en la compilación), sigs.k8s.io/controller-runtime (última - verifica en la compilación), kubebuilder (última - verifica en la compilación), tinygo (última - verifica objetivos de placa en la compilación), wazero (última - verifica en la compilación) y golangci-lint (última - verifica el conjunto de linters en la compilación).
Revisado por Chris St. John·Última actualización: 18 jul 2026