Saltar al contenido principal
Go
Formación a medida Nivel medio certificado-go-programacion-orientada-a-objetos-oop

Go programación orientada a objetos

Go ·Backend

Curso de programación orientada a objetos en Go siguiendo el estilo idiomático del lenguaje, pensado para perfiles que llegan desde Java, C# o TypeScript. Trabajas modelado con structs y métodos, composición por embedding como alternativa a la herencia, interfaces implícitas y pequeñas, polimorfismo estructural, manejo explícito de errores y patrones idiomáticos como constructores y opciones funcionales. Al terminar diseñas dominios en Go sin arrastrar patrones heredados de otros lenguajes.

Evidencias FUNDAE Activación guiada Evaluación con IA Sin permanencia

¿Prefieres verlo en directo? Agenda una demo sin compromiso.

Formación corporativa: este curso se activa bajo pedido para tu organización. Adaptamos temario, calendario y modalidad (teleformación, aula virtual o mixto).

Contenido del curso

Lenguaje eficiente y concurrente creado por Google.

14 módulos 42 lecciones 27 ejercicios evaluados por IA 1 test
  • Introducción a Go Lección
  • Instalación y primer programa de Go Lección
  • Instalación Go primer programa Ejercicio

Detalles del curso

Go es un lenguaje de programación moderno desarrollado por Google que combina la eficiencia de lenguajes compilados con la simplicidad sintáctica de lenguajes interpretados. Aunque Go no implementa la programación orientada a objetos (POO) de manera tradicional como Java o C++, ofrece mecanismos elegantes y potentes alternativas que permiten aplicar los principios fundamentales de la POO de forma pragmática y eficiente.

Fundamentos de la programación orientada a objetos en Go

Go adopta un enfoque minimalista hacia la POO, eliminando la herencia de clases y la jerarquía de tipos en favor de un sistema basado en interfaces y composición. Esta filosofía de diseño, conocida como "composición sobre herencia", permite crear código más modular, testeable y menos propenso a los problemas típicos de las jerarquías de clases profundas.

Structs: la base de los "objetos" en Go

En lugar de clases, Go utiliza estructuras (structs) como el bloque fundamental para modelar datos. Las structs permiten agrupar campos relacionados bajo un mismo tipo, similar a cómo funcionan las clases en otros lenguajes:

type Persona struct {
    Nombre string
    Edad   int
    Email  string
}

A diferencia de las clases tradicionales, las structs en Go son tipos de datos que solo contienen estado (campos), sin métodos incorporados directamente en su definición.

Métodos con receptores: comportamiento para los tipos

Go implementa el comportamiento de los objetos mediante métodos con receptores, que son funciones asociadas a un tipo específico:

// Método con receptor por valor
func (p Persona) Saludar() string {
    return fmt.Sprintf("Hola, me llamo %s y tengo %d años", p.Nombre, p.Edad)
}

// Método con receptor por puntero
func (p *Persona) CumplirAnios() {
    p.Edad++
}

Esta separación entre datos (structs) y comportamiento (métodos) ofrece una flexibilidad única que permite añadir métodos incluso a tipos que no hemos definido nosotros, siempre que estén en nuestro paquete.

Polimorfismo a través de interfaces

El polimorfismo en Go se implementa mediante interfaces, que definen conjuntos de métodos sin implementación:

type Saludador interface {
    Saludar() string
}

Una característica distintiva de Go es que los tipos implementan interfaces implícitamente, sin necesidad de declararlo. Cualquier tipo que implemente todos los métodos de una interfaz automáticamente satisface esa interfaz:

// Animal implementa implícitamente la interfaz Saludador
type Animal struct {
    Especie string
}

func (a Animal) Saludar() string {
    return fmt.Sprintf("Soy un %s", a.Especie)
}

// Ambos tipos pueden usarse polimórficamente
func SaludarATodos(saludadores []Saludador) {
    for _, s := range saludadores {
        fmt.Println(s.Saludar())
    }
}

Esta implementación implícita de interfaces promueve un acoplamiento débil entre componentes y facilita la creación de código modular y testeable.

Composición en lugar de herencia

Go rechaza la herencia tradicional en favor de la composición de tipos, lo que permite construir tipos complejos mediante la inclusión de otros tipos:

type Direccion struct {
    Calle  string
    Ciudad string
    CP     string
}

type Empleado struct {
    Persona   // Composición anónima
    Direccion // Composición anónima
    Salario   float64
    Empresa   string
}

La composición anónima permite acceder directamente a los campos y métodos del tipo embebido, simulando algunos aspectos de la herencia pero sin sus desventajas:

emp := Empleado{
    Persona: Persona{Nombre: "Ana", Edad: 30},
    Salario: 45000,
}

// Acceso directo a campos del tipo embebido
fmt.Println(emp.Nombre) // "Ana"

Esta aproximación fomenta la reutilización de código sin crear jerarquías rígidas de tipos.

Generics: flexibilidad con seguridad de tipos

Desde Go 1.18, el lenguaje incorpora tipos genéricos que permiten escribir funciones y tipos que operan con diferentes tipos de datos manteniendo la seguridad de tipos:

// Función genérica para encontrar el mínimo de dos valores
func Min[T constraints.Ordered](a, b T) T {
    if a < b {
        return a
    }
    return b
}

// Tipo genérico para una pila
type Stack[T any] struct {
    items []T
}

func (s *Stack[T]) Push(item T) {
    s.items = append(s.items, item)
}

func (s *Stack[T]) Pop() (T, bool) {
    var zero T
    if len(s.items) == 0 {
        return zero, false
    }
    
    n := len(s.items) - 1
    item := s.items[n]
    s.items = s.items[:n]
    return item, true
}

Los generics resuelven muchas limitaciones previas de Go, permitiendo crear estructuras de datos y algoritmos reutilizables sin sacrificar la seguridad de tipos ni el rendimiento.

Manejo de errores en Go

Go adopta un enfoque explícito para el manejo de errores, tratándolos como valores retornados por funciones en lugar de excepciones:

func DividirEnteros(a, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("división por cero")
    }
    return a / b, nil
}

// Uso
resultado, err := DividirEnteros(10, 0)
if err != nil {
    fmt.Println("Error:", err)
    return
}
fmt.Println("Resultado:", resultado)

Este patrón fomenta la verificación explícita de errores y evita los problemas asociados con las excepciones no controladas.

Errores personalizados y trazabilidad

Go permite crear tipos de error personalizados que pueden contener información adicional sobre el contexto del error:

type DivisionError struct {
    Dividendo int
    Divisor   int
    Mensaje   string
}

func (e *DivisionError) Error() string {
    return fmt.Sprintf("%s: %d / %d", e.Mensaje, e.Dividendo, e.Divisor)
}

func DividirConContexto(a, b int) (int, error) {
    if b == 0 {
        return 0, &DivisionError{
            Dividendo: a,
            Divisor:   b,
            Mensaje:   "división por cero",
        }
    }
    return a / b, nil
}

Desde Go 1.13, el paquete errors incluye funciones como Unwrap, Is y As que mejoran la trazabilidad de errores y permiten encadenarlos manteniendo el contexto:

func ProcesarDatos(datos []int) error {
    resultado, err := procesarInterno(datos)
    if err != nil {
        return fmt.Errorf("error al procesar datos: %w", err)
    }
    // Continuar procesamiento...
    return nil
}

Otros cursos de Go

Formación a medida ·Nivel inicial

Go Sintaxis Básica

Curso de sintaxis fundamental para incorporarte a un equipo que usa Go en servicios backend, CLIs u operadores cloud-native. Trabajas instalación del toolchain oficial, tipos primitivos, variables y constantes, operadores y control de flujo, arrays, slices, mapas, funciones con múltiples retornos y el patrón idiomático de errores explícitos. Al terminar tienes la base imprescindible para abordar después structs, interfaces, concurrencia y APIs HTTP en Go.

Formación a medida ·Avanzado

Go: concurrencia y cancelación con context

Curso para dominar el modelo concurrente de Go, el rasgo que más diferencia al lenguaje en servicios backend. Trabajas goroutines y grupos de espera, comunicación segura con canales, sincronización con mutex y select, prevención de condiciones de carrera y propagación de cancelación y timeouts con contexto en APIs HTTP y workers. Al terminar diseñas servicios concurrentes que no fugan goroutines y respetan límites de tiempo bajo carga.

Formación a medida ·Nivel medio

Go: I/O, datos, CLI y runtime moderno

Curso práctico para entregar binarios Go que tocan disco, red y base de datos con el mismo ejecutable. Trabajas entrada y salida con ficheros y streams, serialización JSON, recursos incrustados en binario, persistencia en PostgreSQL, construcción de CLIs con flags, iteradores modernos del lenguaje y logging estructurado para observabilidad. Al terminar entregas servicios y herramientas de línea de comandos desplegables con configuración mínima y trazas útiles en producción.

Formación a medida ·Nivel medio

Go: pruebas, benchmarks y módulos

Curso de calidad y empaquetado para proyectos Go que ya están en producción o se publican como librerías compartidas. Trabajas pruebas de tabla y subtests, benchmarks para detectar regresiones de rendimiento, fuzzing para entradas aleatorias, gestión de dependencias reproducibles con módulos y monorepos ligeros con workspaces. Al terminar entregas paquetes Go con tests fiables, dependencias auditables y un pipeline de CI verde.

Llave en mano para empresas

¿Formación para tu equipo en esta tecnología?

Tú nos dices a quién formar y nosotros configuramos la plataforma con tu marca, damos de alta a tu gente, evaluamos las entregas con IA y te entregamos los certificados y los informes técnicos para tu gestor FUNDAE. Catálogo amplio con teleformación, aula virtual o mixto. Sin permanencia, sin coste de setup.

¿Prefieres verlo en directo? Agenda una demo.

Preguntas frecuentes

¿Go programación orientada a objetos es bonificable por FUNDAE para mi empresa?
Puede ser bonificable cuando la acción cumple los requisitos aplicables. La plataforma aporta evidencias técnicas: seguimiento de tiempos, registro de conexiones, foros, encuestas y certificados para que tu entidad organizadora o gestoría revise la documentación.
¿En qué modalidades se imparte Go programación orientada a objetos?
En tres modalidades: teleformación (online asíncrona), aula virtual privada en directo y mixta. Adaptamos temario, calendario y modalidad al equipo.
¿Se adapta Go programación orientada a objetos al nivel de mi equipo?
Sí. Adaptamos temario, calendario y modalidad al nivel y al stack del equipo, con ejercicios evaluados por IA y certificado verificable.
¿Cuánto tarda en activarse para mi empresa?
La activación corporativa estándar es rápida, sin coste de setup ni permanencia.