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.
Desafío
FácilEn 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:
- Definir una estructura
Bookcon tres campos:Title(string),Author(string) yPages(int) - Crear un método llamado
displayInfocon un receptor por valor que muestre la información del libro con el formato:"Title: [title], Author: [author], Pages: [pages]" - Crear un método llamado
getDescriptioncon un receptor por valor que devuelva una cadena con el formato:"[title] by [author]" - Usar
bufio.Scannerpara 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 ascanner.Text() - Esto garantiza que los títulos y nombres de autores con espacios se lean correctamente
- Crear un escáner:
- Analizar las entradas para crear una instancia de
Book - Llamar al método
displayInfopara mostrar la información del libro - Llamar al método
getDescriptiony 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
}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
1Flujo de control avanzado
Switch con `fallthrough`Salir de bucles anidadosContinuar un bucle específicoLa sentencia `goto`Repaso: Control de bucles avanzado4Proyecto: Lista de tareas sencilla
Configuración del proyectoAñadir una tarea2Estructuras y Métodos
Definición de métodos en estructurasReceptores de valorReceptores de punteroElegir receptoresMétodos vs FuncionesResumen - Comportamiento de estructuras5Mapas en profundidad
Mapas de StructsPunteros como valores de MapVerificación de Maps NilComparación de MapsResumen - Contador de frecuencia de palabras3Interfaces (Conceptos básicos)
¿Qué es una interfaz?Definir una interfazImplementar una interfazUso de tipos de interfazInterfaz vacíaAserciones de tipoType SwitchResumen: Formas y comportamientosPractica por tu cuenta: Compilador de Go online