Metody refaktoryzacji, aby być częścią interfejsu

0

Pytanie

Jestem byłym programista python, czasami walczy z wyraźnym naturą Go. Staram się tutaj reorganizacji jakiś kod, aby móc przenosić metoda z jednej struktury w część interfejsu. Ale ten proces wydaje mi się dziwne, chcę potwierdzić, że nie robię coś źle.

Mam następujące interfejsy, struktura i metody:

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

Tak więc, tutaj mam wspólny interfejs wykonania, dostęp do tego interfejsu będzie realizowany przedmiot, wartość zwracana przez metodę GetExecuter.

Teraz, w ramach realizacji jednego z moich wykonawców, chcę przenieść metodę formatowania jako część interfejsu.
Robię więc następujący:

type Formatting interface {
    format() string
}

type Formatter struct {}

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

Dlatego tworzę nowy interfejs, nową, pustą strukturę i aktualizować swoją funkcję, aby użyć jako atrybutu moją poprzednią strukturę.

Choć wydaje się, że działa, wydaje mi się, że to trochę skomplikowane. Szczególnie ta część, gdzie trzeba dodać link na mój oryginalny obiekt jako atrybutu metody. Robię coś tu jest nie tak, czy jest to właściwy sposób?

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

Najlepsza odpowiedź

3

Twój Executer realizacja już się realizuje Formatting interfejs:

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

Należy tutaj zwrócić uwagę na jedną rzecz: kod pokazuje odbiorniki wskaźników. Oznacza to, że metody są zdefiniowane dla *MyExecuterale nie dla MyExecuter. Dlatego trzeba przekazać wskaźniki do instancji struktury, aby to zadziałało. Lub, jak to zrobiłem wyżej, użyj odbiorniki wartości, aby metody zostały określone dla obu MyExecuter i *MyExecuter.

2021-11-22 20:47:20

W innych językach

Ta strona jest w innych językach

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