以前不知反射的用法,那是一直在写弱语言,现在用了go之后才知道反射的用途之一就是动态调用.
php动态调用代码一般是这样的:
?php class MyMath{ public function Add($num1,$num2){ return $num1+$num2; } } $class_name = "MyMath"; $method_name = "Add"; $class = new $class_name(); $num = call_user_func(array($class,$method_name),1,2); var_dump($num);
而在go中是不行的,应该是利用反射,代码举例如下:
package main import ( "fmt" "reflect" ) //自己的数据类 type MyMath struct{ a int } //加法 func (mm *MyMath) Add(num1 float64,num2 float64 ) float64 { reply := num1+num2 return reply } func main() { m := new(MyMath) add := reflect.ValueOf(m).MethodByName("Add") args := make([]reflect.Value, 2) args[0] = reflect.ValueOf(1.0) args[1] = reflect.ValueOf(2.0) ret := add.Call(args) fmt.Println(ret[0]) }
现在我们知道在go中大致反射是怎么用了.