看看这段代码。一切正常:
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不认为classe1
和classe2
实现了moninterface2
,并且代码无法编译。我不明白为什么。
答案 0 :(得分:1)
Go不会考虑
classe1
和classe2
实现moninterface2
和 代码无法编译。我不明白为什么。
因为将工作代码更改为:
func (r *classe1) methode_commune(a,b int) int
func (r *classe2) methode_commune(a,b int) int
这两种类型classe1
和classe2
不再实现接口,而是*classe1
和*classe2
两种类型实现moninterface2
接口。
T
和*T
不是同一类型。
因此,为了使代码编译,您必须在classe1
接口到期之前将指针传递给 classe2
或moninterface2
。例如。 fonctiontest(&classe1{})
。