声明指向签名未知的函数的指针

问题描述 投票:0回答:1

我想声明一个变量,它是指向具有未知签名的函数的指针。

例如,要声明一个变量,该变量可以包含指向可以设置为 log.Printf 的函数的指针,我可以这样做:

var foo func(format string, v ...any)

...

foo = log.Printf

但这假设函数签名是已知的 - 在 C++ 中我会使用

decltype
但我在 Go 中找不到类似的东西。我尝试反射但无法使其工作。

有人有什么想法吗?

go
1个回答
0
投票

将反射与接口结合使用,这样您就可以通过接口使用任何函数。我做了一些改变并在操场上进行了测试

func main() {
var foo interface{}
foo = log.Printf
dynamicFunction(foo, "Pointer, %s!", "Test")}

func dynamicFunction(fn interface{}, args ...interface{}) {

v := reflect.ValueOf(fn)
in := make([]reflect.Value, len(args))
for i, arg := range args {
    in[i] = reflect.ValueOf(arg)
}
v.Call(in)}

Playground

© www.soinside.com 2019 - 2024. All rights reserved.