Conceptos básicos de paquetes y módulos
10 ejemplos para empezar con Paquetes y Módulos: 7 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
10 ejemplos para empezar con Paquetes y Módulos: 7 básicos y 3 intermedios.
mkdir moddemo && cd moddemo.go mod init example.com/moddemo.go run . después de guardarlos como main.go (o la ruta mostrada).go mod init escribe go.mod con la ruta de tu módulo.
// Ejecutar primero en la shell:
// go mod init example.com/moddemoexample.com/... para aprender).go.mod es la raíz versionada para cada paquete bajo este árbol de directorios.go.mod a menos que dividas módulos.Relacionado: Paquetes y Módulos: La Unidad de Distribución de Go - modelo mental de paquetes vs. módulos
Divide el código entre paquetes dentro del mismo módulo.
// greet/greet.go
package greet
import "fmt"
func Hello(name string) string {
return fmt.Sprintf("hola, %s", name)
}// main.go
package main
import (
"fmt"
"example.com/moddemo/greet"
)
func main() {
fmt.Println(greet.Hello("Go"))
}ruta del módulo + /directorio.go run .Relacionado: Nomenclatura de Paquetes y Directorios internal/ - reglas de nomenclatura y visibilidad
go get registra un requisito semver en go.mod.
go get github.com/google/uuid@latestpackage main
import (
"fmt"
"github.com/google/uuid"
)
func main() {
fmt.Println(uuid.NewString())
}go get actualiza go.mod y go.sum.@v1.6.0 en lugar de @latest.Relacionado: go.mod, go.sum y Selección Mínima de Versiones - cómo se resuelven las versiones
Elimina requisitos no utilizados y añade los faltantes.
go mod tidygo mod tidy cambiara archivos; usa go mod tidy -diff o hooks de commit.go.sum alineado con las importaciones reales.Relacionado: Mejores Prácticas de Paquetes, Módulos y Diseño de Proyectos - hábitos de higiene
Inspecciona cuáles seleccionó la cadena de herramientas.
go list -m all
go list -m -versions github.com/google/uuidall imprime la lista de compilación para el módulo actual.-versions consulta las etiquetas disponibles desde el origen (requiere red).Relacionado: Directivas Pseudo-Versiones, replace y retract - anulaciones y lanzamientos erróneos
internal/ bloquea importaciones desde fuera del árbol padre.
moddemo/
go.mod
cmd/app/main.go
internal/config/config.go
// internal/config/config.go
package config
const Port = 8080// cmd/app/main.go
package main
import (
"fmt"
"example.com/moddemo/internal/config"
)
func main() {
fmt.Println(config.Port)
}example.com/moddemo no puede importar internal/config.internal/ sobre comentarios para APIs de "no usar".Relacionado: Diseño Estándar de Proyectos para Servicios y Bibliotecas - diseño de cmd e internal
Importa solo para init, no para uso directo de símbolos.
package main
import (
"fmt"
_ "example.com/moddemo/register" // activa init en el paquete register
)
func main() {
fmt.Println("drivers registrados")
}// register/register.go
package register
func init() {
// registra plugin, driver o manejador http
}init en orden de dependencia._ "github.com/lib/pq") y formatos de imagen.Relacionado: Ciclos de Importación, Importaciones en Blanco y Dot Imports - cuándo encajan las importaciones con efectos secundarios
Apuntar un requisito a una ruta local durante el desarrollo.
// fragmento de go.mod
module example.com/moddemo
go 1.26
require example.com/lib v0.0.0
replace example.com/lib => ../libreplace es para desarrollo; evita confirmar rutas específicas de la máquina en ramas principales compartidas sin documentación.replace no publicadas en tu portátil a menos que las confirmes.go.work para repositorios multi-módulo cuando varios módulos se editan mutuamente a diario.Relacionado: go work: Modo de Espacio de Trabajo para Repositorios Multi-Módulo - espacio de trabajo sin hacks de replace
Desarrolla múltiples módulos juntos sin editar cada go.mod.
# Desde la raíz del repositorio con módulos hermanos app/ y lib/
go work init ./app ./lib
go work use ./app ./lib// app/go.mod
module example.com/app
go 1.26
require example.com/lib v0.0.0go.work solo se aplica en tu máquina; no lo publiques como el contrato de la biblioteca.GOWORK=off fuerza el modo solo de módulos para comparaciones de CI reproducibles.use a medida que nuevos módulos se unen al monorepo.Relacionado: go work: Modo de Espacio de Trabajo para Repositorios Multi-Módulo - flujo de trabajo completo del espacio de trabajo
main delgado, lógica en paquetes, código privado en internal/.
myapp/
go.mod
cmd/myapp/main.go
internal/server/server.go
pkg/client/client.go // opcional: API pública estable para otros repos
// cmd/myapp/main.go
package main
import "example.com/myapp/internal/server"
func main() {
server.Run()
}cmd/ contiene un directorio por binario; cada uno es package main.internal/ es forzosamente privado; pkg/ es la API pública convencional (aún depende de ti si la soportas).cmd/.Relacionado: Diseño Estándar de Proyectos para Servicios y Bibliotecas - guía completa de diseño
Versiones de la pila: Esta página fue escrita para Go 1.26.x (predeterminado Green Tea GC, modernizadores go fix - 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: 19 jul 2026