叮当猫咪
就像 LightWeight 在他的回答中所说的那样,您可以使用反射。您使用reflect.ValueOf 方法来获取类型的值。然后可以使用 MethodByName 方法来获取函数值。获得函数值后,您可以调用 Call 方法来执行它。代码示例package mainimport ( "fmt" "reflect")type TypeOne struct {}func (t *TypeOne) FuncOne() { fmt.Println("FuncOne")}func (t *TypeOne) FuncTwo(name string) { fmt.Println("Hello", name)}func CallFuncByName(myClass interface{}, funcName string, params ...interface{}) (out []reflect.Value, err error) { myClassValue := reflect.ValueOf(myClass) m := myClassValue.MethodByName(funcName) if !m.IsValid() { return make([]reflect.Value, 0), fmt.Errorf("Method not found \"%s\"", funcName) } in := make([]reflect.Value, len(params)) for i, param := range params { in[i] = reflect.ValueOf(param) } out = m.Call(in) return}func main() { t1 := &TypeOne{} out, err := CallFuncByName(t1, "FuncOne") if err != nil { panic(err) } //Return value _ = out out, err = CallFuncByName(t1, "FuncTwo", "monkey") if err != nil { panic(err) } //Return value _ = out}