当我尝试使用接口(interface)而不是实际结构作为函数的返回值时,编译器会出错。用鸭子打字不行吗?
package main
import (
"os/exec"
)
type Runner interface {
Run() error
}
type My struct {
Cmd func(name string, arg ...string) Runner
}
func main() {
compiles := My{
Cmd: func(name string, arg ...string) Runner {
return exec.Command(name, arg...)
},
}
doesNotCompile := My{
Cmd: exec.Command,
}
}
https://play.golang.org/p/gfwMgiC6WLP
最佳答案
您在这里寻找的概念是类型系统中的差异。某些类型系统和类型支持协方差和协方差,但Go的接口(interface)不支持。
参见https://stackoverflow.com/a/54751503/1406669
关于go - 鸭子打字功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57735694/