#!/usr/bin/env bash # init_go_module # -------------- # Pipeline que inicializa un módulo Go simple en el directorio actual. # Crea: go.mod, main.go, .gitignore, build.sh y dev.sh. # # USO: # bash init_go_module.sh [module_path] # # ARGUMENTOS: # module_path Path del módulo Go (opcional; default: github.com/user/) set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" init_go_module() { local module_path="${1:-}" local dir_name dir_name="$(basename "$(pwd)")" if [[ -z "$module_path" ]]; then module_path="github.com/user/${dir_name}" fi echo "=== Inicializar Módulo Go ===" echo " Módulo: ${module_path}" echo " Directorio: $(pwd)" echo "" # Verificar Go if ! command -v go &>/dev/null; then echo "init_go_module: Go no está instalado" >&2 return 1 fi echo "Go detectado: $(go version)" echo "" # Inicializar módulo echo "Inicializando go module..." if ! go mod init "$module_path"; then echo "init_go_module: falló go mod init" >&2 return 1 fi echo "go.mod creado" echo "" # Crear main.go echo "Creando main.go..." cat > main.go << 'GOEOF' package main import ( "fmt" ) func main() { fmt.Println("Hola desde Go!") fmt.Println("Modulo inicializado correctamente") } GOEOF echo "main.go creado" echo "" # Crear .gitignore echo "Creando .gitignore..." cat > .gitignore << 'IGNEOF' # Binarios *.exe *.exe~ *.dll *.so *.dylib bin/ build/ # Archivos de test *.test *.out coverage.txt *.prof # IDEs .idea/ .vscode/ *.swp *.swo *~ # OS .DS_Store Thumbs.db IGNEOF echo ".gitignore creado" echo "" # Crear build.sh echo "Creando build.sh..." cat > build.sh << 'BUILDEOF' #!/bin/bash set -euo pipefail TARGET="${1:-linux}" mkdir -p bin case "$TARGET" in linux) GOOS=linux GOARCH=amd64 go build -o bin/app-linux main.go chmod +x bin/app-linux echo "Compilado: bin/app-linux" ;; windows) GOOS=windows GOARCH=amd64 go build -o bin/app-windows.exe main.go echo "Compilado: bin/app-windows.exe" ;; all) GOOS=linux GOARCH=amd64 go build -o bin/app-linux main.go && echo "Linux OK" GOOS=windows GOARCH=amd64 go build -o bin/app-windows.exe main.go && echo "Windows OK" GOOS=darwin GOARCH=amd64 go build -o bin/app-macos main.go && echo "macOS OK" ;; *) echo "Uso: ./build.sh [linux|windows|all]" >&2 exit 1 ;; esac BUILDEOF chmod +x build.sh echo "build.sh creado" echo "" # Crear dev.sh echo "Creando dev.sh..." cat > dev.sh << 'DEVEOF' #!/bin/bash set -euo pipefail go run main.go "$@" DEVEOF chmod +x dev.sh echo "dev.sh creado" echo "" echo "=== Modulo Go creado exitosamente ===" echo "" echo "Archivos generados:" echo " main.go - Codigo del modulo" echo " go.mod - Modulo Go (${module_path})" echo " .gitignore - Exclusiones git" echo " build.sh - Compilar binario" echo " dev.sh - Ejecutar directamente" echo "" echo "Proximos pasos:" echo " ./dev.sh - Ejecutar el modulo" echo " ./build.sh - Compilar para Linux" echo " ./build.sh windows - Compilar para Windows" echo " ./build.sh all - Compilar para todo" } init_go_module "$@"