重构,方法是部分的一个接口

0

的问题

我是一个前python dev有时,苦苦挣扎的明确性质的去。 我想在这里重构的一些代码,以便能够移动的方法从一个结构的一部分的一个接口。 但是,这个过程似乎怪我,我要确认我没做什么错误。

我有以下的接口,结构和方法:

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

所以我在这里有一个通用的界面执行,这种接口将被访问对象返回的GetExecuter方法。

现在,作为执行情况的一部分,我的一个约执行部,我想要移动的格式方法一部分的一个接口。
所以我做如下:

type Formatting interface {
    format() string
}

type Formatter struct {}

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

所以我创建一个新的接口,一个新的空白的结构,并更新我的功能采取的属性作为我以前的结构。

虽然这似乎工作,在我看来这是一个有点令人费解的。 特别部分在这里我需要添加一个参考,到我最初的对象为属性的方法。 我做错了什么在这里,或者,这是正确的方式?

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

最好的答案

3

你的 Executer 执行已经实现了 Formatting 接口:

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

有一点要注意:你的代码显示指接收器。 这意味着方法的定义 *MyExecuter但不对 MyExecuter. 所以你必须通过的指针为该结构的实例,这个工作。 或者如我所述,使用价值的接收器,因此该方法被定义为 MyExecuter*MyExecuter.

2021-11-22 20:47:20

其他语言

此页面有其他语言版本

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