Menu
Coddy logo textTech

Definición de métodos en estructuras

Parte de la sección Lógica y Flujo del Journey de GO de Coddy — lección 6 de 68.

En Go, un método es una función que pertenece a un tipo específico. A diferencia de las funciones regulares que son independientes, los métodos se adjuntan a structs y le permiten definir el comportamiento para sus tipos de datos personalizados.

Para definir un método, se coloca un receptor entre la palabra clave func y el nombre del método. El receptor especifica a qué tipo pertenece el método.

type Person struct {
    Name string
    Age  int
}

func (p Person) greet() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

En este ejemplo, (p Person) es el receptor, lo que convierte a greet en un método del tipo Person. La variable p representa la instancia de Person sobre la cual se llama al método, de manera similar a this en otros lenguajes.

Luego puedes llamar al método usando la notación de punto en cualquier instancia de Person, otorgando a tus structs la capacidad de realizar acciones relacionadas con sus datos.

quiz iconPonte a prueba

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

quiz iconPonte a prueba

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

quiz iconPonte a prueba

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

challenge icon

Desafío

Fácil

En este desafío, practicarás la definición de métodos en structs creando un sistema simple de gestión de libros. Crearás un struct Book y definirás métodos que permitan al libro mostrar su información.

Nota importante: Dado que los títulos de los libros y los nombres de los autores pueden contener espacios, deberás usar bufio.Scanner para leer líneas completas de entrada. La función fmt.Scanln deja de leer en el primer espacio, lo que rompería los títulos y nombres de autores de varias palabras. Usa bufio.NewScanner(os.Stdin) y llama a scanner.Scan() seguido de scanner.Text() para leer líneas completas.

Recibirás tres entradas:

  • Una cadena que representa el título del libro (por ejemplo, "The Go Programming Language")
  • Una cadena que representa el nombre del autor (por ejemplo, "Alan Donovan")
  • Una cadena que representa el número de páginas (por ejemplo, "380")

Tu tarea es:

  1. Definir un struct Book con tres campos: Title (string), Author (string), y Pages (int)
  2. Crear un método llamado displayInfo con un receptor de valor que imprima la información del libro en el formato: "Title: [title], Author: [author], Pages: [pages]"
  3. Crear un método llamado getDescription con un receptor de valor que devuelva una cadena en el formato: "[title] by [author]"
  4. Usar bufio.Scanner para leer las líneas de entrada correctamente:
    • Crear un scanner: scanner := bufio.NewScanner(os.Stdin)
    • Para cada línea de entrada: llamar a scanner.Scan() y luego a scanner.Text()
    • Esto asegura que los títulos y nombres de autores con espacios se lean correctamente
  5. Analizar las entradas para crear una instancia de Book
  6. Llamar al método displayInfo para imprimir la información del libro
  7. Llamar al método getDescription e imprimir la descripción devuelta

Los métodos deben usar la variable receptora para acceder a los campos del struct y realizar sus respectivas operaciones. Recuerda que los métodos con receptores de valor trabajan con una copia de la instancia del struct.

Hoja de referencia

Los métodos en Go son funciones que pertenecen a un tipo específico. Se definen con un receptor entre la palabra clave func y el nombre del método:

type Person struct {
    Name string
    Age  int
}

func (p Person) greet() {
    fmt.Printf("Hello, my name is %s\n", p.Name)
}

El receptor (p Person) convierte a greet en un método del tipo Person. La variable p representa la instancia sobre la cual se llama al método.

Los métodos se llaman utilizando la notación de punto en las instancias de struct, lo que permite que los structs realicen acciones relacionadas con sus datos.

Pruébalo tú mismo

package main

import (
    "bufio"
    "fmt"
    "os"
    "strconv"
)

// TODO: Define tu estructura Book aquí

// TODO: Define tu método displayInfo aquí

// TODO: Define tu método getDescription aquí

func main() {
    // Crear un escáner para leer las líneas de entrada
    scanner := bufio.NewScanner(os.Stdin)
    
    // Leer el título
    scanner.Scan()
    title := scanner.Text()
    
    // Leer el autor
    scanner.Scan()
    author := scanner.Text()
    
    // Leer las páginas
    scanner.Scan()
    pagesStr := scanner.Text()
    
    // Convertir la cadena de páginas a entero
    pages, _ := strconv.Atoi(pagesStr)
    
    // TODO: Crear una instancia de Book y llamar a los métodos
    
}
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 Lógica y Flujo