Refactoring del metodo da parte di una interfaccia

0

Domanda

Io sono un ex python dev a volte alle prese con la natura esplicita di Andare. Sto cercando di effettuare il refactoring del codice in modo da essere in grado di spostare un metodo da una struttura ad essere parte di una interfaccia. Ma il processo sembra strano anche a me, desidero confermare che non sto facendo qualcosa di sbagliato.

Ho il seguente interfacce, struttura e metodi:

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"}
}

Così qui ho una interfaccia generica Eseguire, questa interfaccia, accessibile da oggetto restituito dalla GetExecuter metodo.

Ora, come parte dell'attuazione di un mio esecutore testamentario, voglio spostare il metodo Format come parte di una interfaccia.
Così sto facendo la seguente:

type Formatting interface {
    format() string
}

type Formatter struct {}

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

Così ho creato una nuova interfaccia, una nuova struttura vuota, e di aggiornare la mia funzione di prendere come attributo il mio precedente struttura.

Mentre questo sembra funzionare, mi sembra un po ' contorta. Specialmente la parte in cui ho bisogno di aggiungere un riferimento al mio oggetto iniziale, come attributo del metodo. Sto facendo qualcosa di sbagliato qui, o questo è il modo giusto?

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

Migliore risposta

3

Il Executer attuazione già implementa il Formatting interfaccia:

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 da notare qui: Il codice mostra puntatore ricevitori. Ciò significa che i metodi sono definiti per *MyExecuterma non per MyExecuter. Quindi devi passare puntatori a struct esempio per questo tipo di lavoro. O, come ho fatto in precedenza, utilizzare il valore ricevitori così i metodi sono definiti per entrambe MyExecuter e *MyExecuter.

2021-11-22 20:47:20

In altre lingue

Questa pagina è in altre lingue

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