2 回答

TA貢獻1797條經(jīng)驗 獲得超4個贊
您可以使用 的Call或CallSlice方法reflect.Value將其作為函數(shù)調(diào)用。與所有reflect.Value方法一樣,這種恐慌是fn錯誤的類型。
func Invoke(fn interface{}, args ...string) {
v := reflect.ValueOf(fn)
rargs := make([]reflect.Value, len(args))
for i, a := range args {
rargs[i] = reflect.ValueOf(a)
}
v.Call(rargs)
}
http://play.golang.org/p/xGmNLDcLL_

TA貢獻1795條經(jīng)驗 獲得超7個贊
您可以使用這樣的類型開關(guān)http://play.golang.org/p/opotbIGdrA
package main
import "fmt"
func PrintThis(arg string) {
fmt.Printf("I'm printing %s", arg)
}
func PrintThisAndThat(arg1, arg2 string) {
fmt.Printf("Now printing %s and %s", arg1, arg2)
}
func Invoke(fn interface{}, args ...string) {
switch m := fn.(type) {
case func(string):
m(args[0])
case func(string, string):
m(args[0], args[1])
default:
}
}
func main() {
Invoke(PrintThis, "foo")
Invoke(PrintThisAndThat, "foo", "bar")
}
但是您需要知道將傳遞哪些函數(shù)以使其正常工作。
順便說一句,您可以PrintThis通過使用...string而不是多個字符串參數(shù)來轉(zhuǎn)換為可變參數(shù)函數(shù)。
- 2 回答
- 0 關(guān)注
- 180 瀏覽
添加回答
舉報