接口类型转换,从超集到子集的转换是可以的;从方法集的子集到超集的转换会导致编译错误
package main
import "fmt"
type Worker interface {
say()
show()
}
type A struct {
}
func (a A) say() {
fmt.Println("say")
}
func (a A) show() {
fmt.Println("show")
}
func do() Worker {
// 接口类型转换,从超集到子集的转换是可以的
// 从方法集的子集到超集的转换会导致编译错误
return A{}
}
func main() {
// 通过函数返回值的类型为接口类型
d := do()
d.show()
// 或者声明变量类型为接口类型
var a Worker = A{}
a.show()
}