Menu
Coddy logo textTech

Definición de métodos en structs

Parte de la sección Programación Orientada a Objetos del Journey de GO de Coddy — lección 7 de 107.

Los métodos en Go son funciones con un argumento receptor especial que asocia la función con un tipo struct.

Sintaxis del método

func (receiverName StructType) MethodName() ReturnType {
    // cuerpo del método
}

Define una estructura con métodos

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Métodos con parámetros

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Llamada a métodos

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Output: 15
fmt.Println(rect.Perimeter()) // Output: 16
fmt.Println(rect.Scale(2))    // Output: 30

El receptor (r Rectangle) te permite acceder a los campos de la estructura dentro del método usando la variable receptora r. Los métodos pueden llamar a otros métodos en la misma estructura.

challenge icon

Desafío

Intermedio

Agrega tres métodos a la estructura Circle:

  • Area — devuelve math.Pi * radius * radius
  • Circumference — devuelve 2 * math.Pi * radius
  • Describe — devuelve un string: "Circle with radius X.XX"

Hoja de referencia

Los métodos en Go son funciones con un argumento receptor especial que asocia la función con un tipo struct.

Sintaxis de los métodos:

func (receiverName StructType) MethodName() ReturnType {
    // method body
}

Ejemplo con un struct y métodos:

type Rectangle struct {
    Width  float64
    Height float64
}

func (r Rectangle) Area() float64 {
    return r.Width * r.Height
}

func (r Rectangle) Perimeter() float64 {
    return 2 * (r.Width + r.Height)
}

Los métodos pueden aceptar parámetros:

func (r Rectangle) Scale(factor float64) float64 {
    return r.Area() * factor
}

Llamada a métodos:

rect := Rectangle{Width: 5, Height: 3}
fmt.Println(rect.Area())      // Output: 15
fmt.Println(rect.Perimeter()) // Output: 16
fmt.Println(rect.Scale(2))    // Output: 30

El receptor permite acceder a los campos del struct dentro del método. Los métodos pueden llamar a otros métodos del mismo struct.

Pruébalo tú mismo

package main

import "fmt"

func main() {
    var radius float64
    fmt.Scan(&radius)

    c := Circle{Radius: radius}

    fmt.Printf("Area: %.2f\n", c.Area())
    fmt.Printf("Circumference: %.2f\n", c.Circumference())
    fmt.Printf("Description: %s\n", c.Describe())
}
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación Orientada a Objetos