Golang Método con Pointer receptor
al intentar modificar el valor de una instancia a través de un método, es crucial comprender el concepto de puntero receptores. En este ejemplo, el método setSomefield no funciona como se esperaba porque su receptor no es de tipo puntero.
para rectificar esto, modificamos el método setSomefield para aceptar un receptor de puntero de la siguiente manera:
func (i *Implementation) SetSomeField(newValue string) { ... }
Sin embargo, este cambio introduce un nuevo problema: la estructura ya no implementa la interfaz porque el método getSomefield todavía tiene un receptor de valor.
la solución radica en usar un puntero a la estructura cuando Implementación de la interfaz. Al hacerlo, habilitamos el método para modificar la instancia real sin crear una copia. Aquí está el código modificado:
type IFace interface { SetSomeField(newValue string) GetSomeField() string } type Implementation struct { someField string } func (i *Implementation) GetSomeField() string { return i.someField } func (i *Implementation) SetSomeField(newValue string) { i.someField = newValue } func Create() *Implementation { return &Implementation{someField: "Hello"} } func main() { var a IFace a = Create() a.SetSomeField("World") fmt.Println(a.GetSomeField()) }
En este código actualizado, la función Crear devuelve un puntero a la estructura de implementación, que implementa la interfaz IFACE. En consecuencia, la variable de tipo IFACE puede referirse al puntero a la estructura de implementación, lo que permite que el método setSomefield modifique su valor.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3