zoukankan      html  css  js  c++  java
  • go通过名称来调用对应的方法

    仅仅是为了学习go语言中的反射。

    package main
    
    import (
    	"errors"
    	"fmt"
    	"reflect"
    )
    
    func Call(m map[string]interface{}, name string, params ...interface{}) ([]reflect.Value,error) {
    	_, found := m[name]
    	if !found {
    		return nil, errors.New("map do not contains key ...")
    	}
    	fv := reflect.ValueOf(m[name])
    	if fv.Kind() != reflect.Func {
    		return nil, errors.New("the value of key is not a function")
    	}
    
    	if len(params) != fv.Type().NumIn() {
    		return nil, errors.New("argument passed in does not match the function")
    	}
    
    	in := make([]reflect.Value, len(params))
    	// for i := 0; i < len(params); i++ {
    	// 	in[i] = reflect.ValueOf(params[i])
    	// }
    	for i, param := range params {
    		in[i] = reflect.ValueOf(param)
    	}
    	return fv.Call(in), nil
    }
    
    func test1(name string) {
    	fmt.Printf("hello,%s 
    ", name)
    }
    
    func test2(name string, age int) {
    	fmt.Printf("hello,my name is %s ,%d years old", name, age)
    }
    
    func main() {
    	m := make(map[string]interface{})
    	m["test1"] = test1
    	m["test2"] = test2
    
    	result, err := Call(m, "test2", "hupeng", 12)
    	if err != nil {
    		panic(err)
    	}
    	fmt.Println(result)
    
    }
    
    
  • 相关阅读:
    maven配置成功,但显示'cmd' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    java ee 4周
    java 3周
    XML
    web后台过程
    【转】Maven详细
    HDFS 客户端读写操作详情
    HDFS DataNode详解
    HDFS NameNode详解
    CSS的四种样式
  • 原文地址:https://www.cnblogs.com/hupengcool/p/4128522.html
Copyright © 2011-2022 走看看