建议用 interface 的实现来判断,如果强行判断的话,那本质是比较 function signature 。拿到 test 和 fn 的 type 然后比较即可。
```go
type fn func(ctx context.Context) []string
func test(ctx context.Context) []string {
return []string{"1"}
}
func main() {
if matchFunctionSignature(reflect.TypeOf(test), reflect.TypeOf((fn)(nil))) {
fmt.Println(true)
} else {
fmt.Println(false)
}
}
func matchFunctionSignature(a, b reflect.Type) bool {
if a.Kind() != reflect.Func || b.Kind() != reflect.Func {
return false
}
if a.NumIn() != b.NumIn() || a.NumOut() != b.NumOut() {
return false
}
for i := 0; i < a.NumIn(); i++ {
if
a.In(i) !=
b.In(i) {
return false
}
}
for i := 0; i < a.NumOut(); i++ {
if a.Out(i) != b.Out(i) {
return false
}
}
return true
}
```