使用指针

时间:2017-11-24 10:16:55

标签: go

看看这段代码。一切正常:

type moninterface2 interface {
    methode_commune(a,b int) int
}

type classe1 struct {
    a, b int
}

type classe2 struct {
    c, d int
}

func (r classe1) methode_commune(a,b int) int {
    return a+b
}

func (r classe2) methode_commune(a,b int) int {
    return a*b
}

func fonctiontest(param moninterface2) {
    ret := param.methode_commune(2,3)
    fmt.Println(ret)
}

但如果我这样声明methode_commune

func (r *classe1) methode_commune(a,b int) int 
func (r *classe2) methode_commune(a,b int) int 

Go不认为classe1classe2实现了moninterface2,并且代码无法编译。我不明白为什么。

1 个答案:

答案 0 :(得分:1)

  

Go不会考虑classe1classe2实现moninterface2和   代码无法编译。我不明白为什么。

因为将工作代码更改为:

func (r *classe1) methode_commune(a,b int) int 
func (r *classe2) methode_commune(a,b int) int 

这两种类型classe1classe2不再实现接口,而是*classe1*classe2两种类型实现moninterface2接口。

T*T不是同一类型。

因此,为了使代码编译,您必须在classe1接口到期之前将指针传递给 classe2moninterface2。例如。 fonctiontest(&classe1{})