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.

challenge icon

Desafío

Fácil

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

Nota importante: Como los títulos de los libros y los nombres de los autores pueden contener espacios, tendrás que usar bufio.Scanner para leer líneas completas de entrada. La función fmt.Scanln deja de leer en el primer espacio, lo que provocaría problemas con los títulos y nombres de autores compuestos por 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 una estructura Book con tres campos: Title (string), Author (string) y Pages (int)
  2. Crear un método llamado displayInfo con un receptor por valor que muestre la información del libro con el formato: "Title: [title], Author: [author], Pages: [pages]"
  3. Crear un método llamado getDescription con un receptor por valor que devuelva una cadena con el formato: "[title] by [author]"
  4. Usar bufio.Scanner para leer correctamente las líneas de entrada:
    • Crear un escáner: scanner := bufio.NewScanner(os.Stdin)
    • Para cada línea de entrada: llamar a scanner.Scan() y después a scanner.Text()
    • Esto garantiza 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 mostrar la información del libro
  7. Llamar al método getDescription y mostrar la descripción devuelta

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

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

Practica por tu cuenta: Compilador de Go online