这个问题在这里已经有了答案:
cannot use function (type func()) as type in argument
(1 个回答)
2年前关闭。
给定以下 Go 代码
type fType = func(interface{}) (*interface{}, error)
func f1(arg interface{}, fun fType) *interface{} {
r, _ := fun(arg)
return r
}
func f2(path string) {
r := f1(path, os.Open) //error
}
我在最后一行得到错误。错误是:
cannot use os.Open (type func(string) (*os.File, error)) as type func(interface {}) (*interface {}, error) in argument to f1
作为更多信息,在 Visual Studio 代码屏幕截图下方:
我的错误是什么?
编辑
如果我用一系列丑陋的转换阻塞 f2,则代码编译时不会出错。有没有更简洁优雅的方式来实现同样的目标?
func f2(path string) {
var itfPath interface{}
itfPath = path
osOpen := func(p interface{}) (*interface{}, error) {
var path string
path = p.(string)
file, err := os.Open(path)
var fil interface{}
fil = file
return &fil, err
}
r := f1(itfPath, osOpen)
}
最佳答案
错误是 os.Open 是 func(string)(*os.File,error)
,而不是 func(interface{}) (*interface{},error)
.一般来说,如果 func(interface{})
是必需的,您不能通过 func(someOtherType)
,仅仅是因为类型签名不匹配。调用函数获取/返回 interface{}
的机制与获取非接口(interface)类型的函数不同。
关于go - Go 中的高级函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60574854/