Refactorización método para ser parte de una interfaz

0

Pregunta

Yo soy un ex python dev a veces luchando con la naturaleza explícita de Ir. Estoy tratando de aquí a refactorizar el código con el fin de ser capaz de mover un método de una estructura a ser parte de una interfaz. Pero el proceso parece extraño para mí, deseo confirmar que no estoy haciendo algo incorrectamente.

Tengo el siguiente interfaces, estructura y métodos:

type Executing interface {
    Execute()
}

type MyExecuter struct {
     attribut1 string
}

//The function I wish to move
func (exe1 *MyExecuter) format() string {
    return fmt.sprintf ("formated : %s", exe1.attribut1) 
}


func (exe1 *MyExecuter) Execute() {
    //Executing
    fmt.Println(exe.format())
}



func GetExecuter () Executer{
    return MyExecuter{attribut1: "test"}
}

Así que aquí me tienen una interfaz genérica Ejecutar, esta interfaz se accede por el objeto devuelto por la GetExecuter método.

Ahora, como parte de la implementación de uno de mis Executer, quiero mover el Formato de método como parte de una interfaz.
Así que estoy haciendo lo siguiente:

type Formatting interface {
    format() string
}

type Formatter struct {}

func (formatter *Formatter) format(exe1 *MyExecuter) (string) {
    return fmt.sprintf ("formated : %s", exe1.attribut1)
}

Así que crear una nueva interfaz, una nueva estructura vacía, y la actualización de mi función para tomar como atributo de mi anterior estructura.

Mientras que esto parece funcionar, a mí me parece que esto es un poco complicado. Especialmente la parte donde tengo que agregar una referencia a mi objeto inicial como atributo del método. Estoy haciendo algo mal aquí, o este es el camino correcto?

go interface
2021-11-22 20:42:22
1

Mejor respuesta

3

Su Executer la aplicación ya se implementa el Formatting interfaz:

type Executing interface {
    Execute()
}

type Formatting interface {
    format() string
}

func (exe1 MyExecuter) format() string {
    return fmt.sprintf ("formated : %s", exe1.attribut1) 
}


func (exe1 MyExecuter) Execute() {
    //Executing
    fmt.Println(exe.format())
}

v:=MyExecuter{}
// Here, v implements Executing and Formatting interfaces

Una cosa importante: el código muestra puntero receptores. Eso significa que se definen los métodos para *MyExecuter, pero no para MyExecuter. Así que usted tiene que pasar punteros a la estructura de la instancia para que esto funcione. O, como hice anteriormente, utilice el valor de los receptores para los métodos definidos para ambos MyExecuter y *MyExecuter.

2021-11-22 20:47:20

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................