Junior
¿Qué significa la presencia de una estrella junto al receptor en Go?
sobes.tech AI
Respuesta de la IA
La presencia de una estrella (*) en un receptor en Go significa que el método se llama en un puntero a una instancia del tipo, y no en el valor del tipo.
Las principales implicaciones son:
- Cambio de estado: Un método con receptor puntero puede modificar los campos de la estructura (u otro tipo) a la que apunta el receptor. Sin la estrella, el método trabaja con una copia del valor, y los cambios dentro del método no afectan al original.
- Rendimiento: Pasar un puntero puede ser más eficiente que pasar una estructura grande por valor, ya que solo se pasa la dirección de memoria, no toda la estructura.
- Valores nil: Los métodos con receptor puntero pueden ser llamados en punteros
nil, lo cual puede ser útil para manejar estos casos de manera elegante.
Ejemplo:
package main
import "fmt"
type Counter struct {
value int
}
// Método con receptor por valor: no modifica el Counter original
func (c Counter) IncrementByValue() {
c.value++ // Solo se modifica la copia
}
// Método con receptor puntero: modifica el Counter original
func (c *Counter) IncrementByPointer() {
c.value++ // Se modifica el valor original
}
func main() {
c1 := Counter{value: 0}
c1.IncrementByValue()
fmt.Println("Valor después de IncrementByValue:", c1.value) // Imprimirá 0
c2 := Counter{value: 0}
c2.IncrementByPointer()
fmt.Println("Valor después de IncrementByPointer:", c2.value) // Imprimirá 1
}