← Volver al listado de tecnologías
Introduccion a Go e Instalacion
Introduccion a Go e Instalacion
Que es Go
Go (o Golang) es un lenguaje de programacion de codigo abierto creado en 2009 en Google por Rob Pike, Ken Thompson y Robert Griesemer. Nacio de la frustracion con la complejidad de C++ y la lentitud de compilacion en proyectos grandes de Google.
La filosofia de Go se resume en:
- Simplicidad radical: Pocas palabras clave (25), sin herencia, sin generics hasta Go 1.18
- Concurrencia nativa: Goroutines y channels como ciudadanos de primera clase
- Compilacion rapida: Binarios estaticos en segundos
- Tooling incluido: Formatter, linter, testing y profiling en la stdlib
Por que aprender Go
| Caracteristica | Go | C | Rust | Python |
|---|---|---|---|---|
| Compilacion | Muy rapida | Rapida | Lenta | Interpretado |
| Garbage Collector | Si | No | No | Si |
| Concurrencia | Goroutines | Threads/pthreads | async/Threads | asyncio/GIL |
| Curva de aprendizaje | Baja | Media | Alta | Baja |
| Binario estatico | Si | Si | Si | No |
| Velocidad ejecucion | Alta | Muy alta | Muy alta | Baja |
| Manejo de memoria | Automatico (GC) | Manual | Ownership | Automatico (GC) |
Go es ideal para:
- APIs y microservicios (usado por Docker, Kubernetes, Terraform)
- CLIs (cobra, bubbletea)
- Sistemas distribuidos
- Herramientas DevOps
Instalacion
Linux
# Descargar desde go.dev (ajustar version)
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
# Eliminar instalacion previa e instalar
sudo rm -rf /usr/local/go
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
# Agregar al PATH (~/.bashrc o ~/.zshrc)
export PATH=$PATH:/usr/local/go/bin
macOS
# Con Homebrew
brew install go
# O descargar el .pkg desde go.dev
Windows
# Con winget
winget install GoLang.Go
# O descargar el .msi desde go.dev
Verificar instalacion
go version
# go version go1.22.0 linux/amd64
Tu primer programa
Crea un directorio y un archivo main.go:
mkdir hola-go && cd hola-go
go mod init hola-go
package main
import "fmt"
func main() {
fmt.Println("Hola, Go!")
}
Ejecuta de dos formas:
# Ejecutar directamente (compila y ejecuta en memoria)
go run main.go
# Hola, Go!
# Compilar a binario y ejecutar
go build -o hola main.go
./hola
# Hola, Go!
Estructura de un archivo Go
Todo archivo Go tiene tres secciones en orden:
// 1. Declaracion de paquete (obligatorio)
package main
// 2. Imports (opcionales)
import (
"fmt"
"math"
)
// 3. Declaraciones (funciones, variables, tipos)
func main() {
fmt.Println("Pi es:", math.Pi)
}
Reglas importantes:
package maindefine un ejecutable. Otros nombres definen bibliotecasfunc main()es el punto de entrada (solo enpackage main)- Los imports no usados generan error de compilacion
- Las variables no usadas generan error de compilacion
- Los nombres que inician con mayuscula son publicos (exportados)
go run vs go build
| Comando | Que hace | Cuando usarlo |
|---|---|---|
go run main.go | Compila y ejecuta en un paso | Desarrollo y pruebas rapidas |
go build -o app main.go | Genera binario ejecutable | Produccion y distribucion |
go install | Compila e instala en $GOPATH/bin | Herramientas CLI |
GOPATH y Go Modules
GOPATH (legacy)
Antes de Go 1.11, todo el codigo vivia en $GOPATH (por defecto ~/go):
echo $GOPATH
# /home/usuario/go
Go Modules (moderno)
Desde Go 1.11+ (estandar desde 1.16), los modulos reemplazaron GOPATH:
# Crear un nuevo modulo
go mod init github.com/usuario/mi-proyecto
# Esto crea go.mod
// go.mod
module github.com/usuario/mi-proyecto
go 1.22
Comandos esenciales de modulos:
# Descargar dependencias
go mod download
# Limpiar dependencias no usadas
go mod tidy
# Ver dependencias
go list -m all
Herramientas integradas
Go incluye herramientas que en otros lenguajes requieren librerias externas:
# Formatear codigo (estandar unico, sin debates)
go fmt ./...
# Analisis estatico
go vet ./...
# Ejecutar tests
go test ./...
# Ver documentacion
go doc fmt.Println
Ejercicios
- Instala Go y verifica la version con
go version - Crea un modulo con
go mod inity unmain.goque imprima tu nombre - Compila el programa con
go buildy verifica el tamanio del binario conls -lh
Resumen
- Go fue creado en Google para resolver problemas de compilacion lenta y complejidad
go runpara desarrollo rapido,go buildpara generar binarios- Todo archivo Go tiene: package, imports y declaraciones
- Go Modules (
go.mod) es el sistema moderno de gestion de dependencias - Las herramientas (
fmt,vet,test) vienen integradas