Refatoração método para ser parte de uma interface

0

Pergunta

Eu sou um ex python dev, por vezes, lutando com a explícita a natureza de Ir. Eu estou tentando aqui para refatorar um código a fim de ser capaz de mover um método a partir de uma estrutura a ser parte de uma interface. Mas o processo parece estranho para mim, eu gostaria de confirmar que eu não estou fazendo algo errado.

Eu tenho as seguintes interfaces, estrutura e 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"}
}

Então aqui eu tenho uma interface genérica de Execução, esta interface será acessado por objeto retornado pelo GetExecuter método.

Agora, como parte da implementação de um dos meus Executora, eu quero passar o Formato método como parte de uma interface.
Então, eu estou fazendo o seguinte:

type Formatting interface {
    format() string
}

type Formatter struct {}

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

Assim que eu criar uma nova interface, um novo vazio estrutura, e atualizar a minha função para tomar como atributo a minha estrutura anterior.

Enquanto isso parece funcionar, parece-me que é um pouco complicada. Especialmente a parte em que eu preciso para adicionar uma referência para o objeto inicial como atributo do método. Estou fazendo algo de errado aqui, ou esse é o caminho certo?

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

Melhor resposta

3

O seu Executer a implementação já implementa a Formatting interface:

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

Uma coisa a notar: o Seu código mostra ponteiro receptores. Isso significa que os métodos são definidos para *MyExecuter, mas não para MyExecuter. Então você tem que passar ponteiros para a estrutura instância para este trabalho. Ou, como eu fiz acima, use o valor de receptores para os métodos são definidos para ambas MyExecuter e *MyExecuter.

2021-11-22 20:47:20

Em outros idiomas

Esta página está em outros idiomas

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