我正在尝试编写一个涉及模拟几个结构的测试,其中一个结构的函数返回另一个结构的实例。但是,我遇到了可以使用以下代码重现的问题:
package main
type Machine1 interface {
Produce() Material1
}
type Machine2 interface {
Produce() Material2
}
type Material1 interface {
Use() error
}
type Material2 interface {
Use() error
}
type PencilMachine struct{}
func (pm *PencilMachine) Produce() Material1 {
return &Pencil{}
}
type Pencil struct{}
func (p *Pencil) Use() error {
return nil
}
func main() {
pm := new(PencilMachine)
var m1 Machine1
m1 = Machine1(pm)
var m2 Machine2
m2 = Machine2(m1)
_ = m2
}
这给出了以下错误:
prog.go:38: cannot convert m1 (type Machine1) to type Machine2:
Machine1 does not implement Machine2 (wrong type for Produce method)
have Produce() Material1
want Produce() Material2
请注意 Pencil 结构如何实现 Material1 和 Material2 接口。但是 (pm *PencilMachine) Produce() 的返回类型是 Material1 而不是 Material2。很好奇为什么这不起作用,因为任何实现 Material1 的东西也实现了 Material2。
谢谢!
https://play.golang.org/p/3D2jsSLoI0
慕桂英4014372
12345678_0001
相关分类