【发布时间】:2018-05-02 21:33:25
【问题描述】:
我试图定义几个接口来重构一些代码,但我遇到了一个问题,Go 不允许我将函数分配给变量。 这是设置
main.go
type Gettable interface {
Get() int64
}
type MyFunction func(int64) (Gettable, error)
func main() {
var f MyFunction
f = sub.TestFn2
a, _ := f(1)
fmt.Println(a)
}
主/子
package sub
type MyStruct struct {
Val int64
}
func (v MyStruct) Get() int64 {
return v.Val
}
func TestFn2(a int64) (MyStruct, error) {
return MyStruct{a}, nil
}
我正在尝试定义一个泛型函数类型,并在子包中创建具体函数
理想情况下,我想将函数存储在地图中并用类似的东西调用它们
FnMap["fnName"]()
我还没到,
我收到一个错误提示
/topics.go:27:4: cannot use sub.TestFn2 (type func(int64) (sub.MyStruct, error)) as type MyFunction in assignment
但是MyStruct明确实现了接口Gettable
【问题讨论】:
-
Go 中没有协方差:函数签名必须完全匹配。
-
我建议将函数附加到
type,这样会更简洁,也更惯用
标签: go