Refactoring metoda de a fi parte dintr-o interfață

0

Problema

Eu sunt un ex python-dev, uneori, se luptă cu caracterul explicit de a Merge. Am încercat aici să refactor un cod pentru a putea muta o metodă de o structură pentru a fi parte dintr-o interfață. Dar procesul pare ciudat pentru mine, doresc să confirm eu nu fac ceva greșit.

Am următoarele interfețe, structura și metodele:

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

Deci, aici am un generic interfață Executa, aceasta interfata va fi accesate prin obiectul returnat de GetExecuter metodă.

Acum, ca parte a punerii în aplicare de unul dintre Executer, vreau să mă mut în Format metodă ca parte a unei interfețe.
Fac, deci, următoarele:

type Formatting interface {
    format() string
}

type Formatter struct {}

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

Așa că am crea o noua interfata, un nou gol structura și actualizează funcția mea de a avea ca atribut meu anterior structură.

În timp ce acest lucru pare să funcționeze, mi se pare că acest lucru este un pic complicat. În special partea în care am nevoie pentru a adăuga o referință la mea inițială a obiectului ca atribut al metodei. Fac ceva gresit aici, sau aceasta este calea cea dreaptă?

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

Cel mai bun răspuns

3

Dvs. Executer punerea în aplicare deja implementează Formatting interfata:

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

Un lucru de remarcat aici: codul arată indicatorul receptoare. Asta înseamnă că metodele sunt definite pentru *MyExecuter, dar nu pentru MyExecuter. Deci, va trebui să treacă indicii pentru a struct instanță pentru ca aceasta să funcționeze. Sau, cum am făcut mai sus, utilizați valoarea receptoare deci metodele sunt definite atât pentru MyExecuter și *MyExecuter.

2021-11-22 20:47:20

În alte limbi

Această pagină este în alte limbi

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