【发布时间】:2017-04-18 08:00:26
【问题描述】:
我想将 struct 方法作为函数值传递。如果函数需要返回 interface{} 并且它返回 *struct,为什么编译会失败?如果我尝试从声明为返回接口{}(包装函数)的函数返回 *struct,它会完美工作。
package main
func main() {
println("hello")
testInterface(wrapper) // works
instance := MyStruct{}
testInterface(instance.works) // works
testInterface(instance.fails) // fails: ./main.go:8: cannot use instance.fails (type func(int) *MyStruct) as type func(int) interface {} in argument to testInterface
}
func testInterface(f func() interface{}) {
f()
return
}
type MyStruct struct {
}
func (s *MyStruct) works() interface{} {
return s
}
func (s *MyStruct) fails() *MyStruct {
return s
}
func wrapper() interface{} {
s := MyStruct{}
return s.fails()
}
【问题讨论】:
标签: go