Receptores de valor
Parte de la sección Lógica y Flujo del Journey de GO de Coddy. Lección 7 de 68.
Cuando defines un método con un receptor de valor, el método opera sobre una copia de la instancia de la estructura en lugar de sobre la original. Esto significa que cualquier cambio realizado en el receptor dentro del método no afectará a la variable de estructura original.
type Counter struct {
Value int
}
func (c Counter) increment() {
c.Value++ // Esto modifica la copia, no el original
}En este ejemplo, el método increment tiene un receptor por valor (c Counter). Cuando llamas a este método en una instancia de Counter, Go crea una copia de la estructura y se la pasa al método. Cualquier modificación de c.Value dentro del método solo afecta a esta copia.
Los receptores por valor son útiles cuando tu método solo necesita leer datos de la estructura sin modificarla. Son seguros de usar porque garantizan que los datos originales permanezcan sin cambios, lo que hace que tu código sea más predecible y evita efectos secundarios no deseados.
Desafío
FácilEn este desafío, practicarás el trabajo con receptores por valor mediante la creación de un sistema sencillo de monitoreo de temperatura. Crearás una estructura Sensor y definirás métodos que demuestran cómo funcionan los receptores por valor con copias de la estructura.
Recibirás tres entradas:
- Una cadena que representa el ID del sensor (por ejemplo,
"TEMP001") - Una cadena que representa la lectura de temperatura actual (por ejemplo,
"23.5") - Una cadena que representa un valor de ajuste de temperatura (por ejemplo,
"2.0")
Tu tarea es:
- Definir una estructura
Sensorcon dos campos:ID(string) yTemperature(float64) - Crear un método llamado
displayReadingcon un receptor por valor que muestre la información del sensor en el formato:"Sensor [ID]: [temperature]°C" - Crear un método llamado
adjustTemperaturecon un receptor por valor que sume el valor de ajuste a la temperatura y muestre:"Adjusted reading: [new_temperature]°C" - Analizar las entradas para crear una instancia de
Sensor - Llamar al método
displayReadingpara mostrar la temperatura original - Llamar al método
adjustTemperaturecon el valor de ajuste - Volver a llamar al método
displayReadingpara demostrar que la estructura original permanece sin cambios
Este desafío demostrará que los métodos con receptores por valor trabajan con copias de la estructura, por lo que el valor de temperatura de la estructura original permanecerá sin cambios incluso después de llamar al método adjustTemperature. Los valores de temperatura deben mostrarse con una precisión de un decimal.
Pruébalo tú mismo
package main
import (
"fmt"
"strconv"
)
// TODO: Define tu estructura Sensor aquí
// TODO: Define tu método displayReading con receptor de valor aquí
// TODO: Define tu método adjustTemperature con receptor de valor aquí
func main() {
// Leer entradas
var sensorID string
var tempStr string
var adjustStr string
fmt.Scanln(&sensorID)
fmt.Scanln(&tempStr)
fmt.Scanln(&adjustStr)
// Convertir los valores de temperatura y ajuste
temperature, _ := strconv.ParseFloat(tempStr, 64)
adjustment, _ := strconv.ParseFloat(adjustStr, 64)
// TODO: Crear una instancia de Sensor y llamar a los métodos requeridos
}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