Resumen - Estructuras de datos personalizadas
Parte de la sección Fundamentos del Journey de GO de Coddy — lección 101 de 109.
Desafío
FácilVamos a crear una estructura de datos personalizada sencilla para recapitular lo que hemos aprendido sobre las structs en Go.
En este desafío, crearás una estructura de datos Counter básica que pueda:
- Rastrear un valor de conteo
- Incrementar el conteo
- Decrementar el conteo
- Reiniciar el conteo a cero
Completa el código implementando los métodos que faltan para la struct Counter.
Pruébalo tú mismo
package main
import (
"fmt"
)
// Counter es una estructura de datos de contador simple
type Counter struct {
value int
name string
}
// NewCounter crea un nuevo contador con un nombre dado
func NewCounter(name string) Counter {
return Counter{
value: 0,
name: name,
}
}
// Increment aumenta el contador en 1
func (c *Counter) Increment() {
// Añade código para incrementar el valor del contador
}
// Decrement disminuye el contador en 1 (pero no por debajo de 0)
func (c *Counter) Decrement() {
// Añade código para decrementar el valor del contador
// Asegúrate de que el valor no baje de 0
}
// Reset vuelve a poner el contador a 0
func (c *Counter) Reset() {
// Añade código para restablecer el contador a 0
}
// Value devuelve el conteo actual
func (c Counter) Value() int {
// Añade código para devolver el valor actual
return 0 // Reemplaza esto
}
// String devuelve una representación en cadena del contador
func (c Counter) String() string {
return fmt.Sprintf("%s: %d", c.name, c.value)
}
func main() {
// Crea un nuevo contador llamado "Visitors"
visitors := NewCounter("Visitors")
// Incrementa el contador unas cuantas veces
visitors.Increment()
visitors.Increment()
visitors.Increment()
// Imprime el conteo actual
fmt.Println(visitors)
fmt.Println("Current value:", visitors.Value())
// Decrementa el contador
visitors.Decrement()
fmt.Println(visitors)
// Restablece el contador
visitors.Reset()
fmt.Println(visitors)
// Prueba que el contador no baje de cero
visitors.Decrement()
fmt.Println(visitors)
}Todas las lecciones de Fundamentos
4Operadores de comparación y lógicos
Operadores de comparación - Parte 1Operadores de comparación - Parte 2Operador lógico ANDOperador lógico OROperador lógico NOTConceptos básicos de precedencia de operadoresResumen: Realizar comparaciones7Flujo de control: Bucles
Explicación del bucle `for`Bucle `for` - BásicoBucle `for` - Solo condiciónLa palabra clave `break`La palabra clave `continue`Bucles anidadosResumen - Repetición de acciones10Tipos compuestos: Arrays
Introducción a los ArraysDeclaración de ArraysInicialización de ArraysAcceso a elementos de un ArrayLongitud del Array con `len`Iterar sobre ArraysArrays multidimensionales13Tipos compuestos: Structs
Definición de tipos personalizadosCreación de instancias de StructsAcceso a campos de StructsPunteros a StructsInicialización de StructsStructs embebidosStructs anónimosResumen - Estructuras de datos personalizadas2Variables y tipos de datos básicos
¿Qué es una variable?Inferencia de tipos con `:=`Enteros (int)Números de punto flotanteBooleanosStringsValores ceroConstantesConvenciones de nomenclaturaResumen - Variables y tipos5Entrada y salida básica
Salida con formatoVerbos de formatoImpresión de tiposObtener entrada básica del usuarioResumen: Entrada y salida8Funciones
Comprendiendo las funcionesDeclaración de una funciónLlamada a funcionesParámetros de funciónRetorno de un solo valorRetorno de múltiples valoresValores de retorno con nombreConceptos básicos del alcance de las funcionesResumen: Creando código reutilizable3Operadores básicos
Operadores aritméticosOperador de divisiónEl operador móduloOperador de asignaciónOperadores de asignación compuestaIncremento y decrementoResumen - Cálculos6Flujo de control: Condicionales
La sentencia `if`La palabra clave `else`La palabra clave `else if`Sombreado de variables en `if`Inicialización de variablesLa sentencia `switch``switch` con expresiones`switch` sin expresiónLa palabra clave `fallthrough`Resumen: Toma de decisiones