reflection is a simple implementation of reflect scheme of Golang to inject dependencies, invoke method and so on.
reflection.ForMethod(m interface{}) is entrance to invoke normal method by using **Call(params ...interface{}) ** or CallType(params ...interface{}) and responses can be acquired where types of the former's parameters must be consistent with that in the defination of invoked method with the same order strictly, allowing same-type parameters, while the latter invokes method by types of parameters whose order may not be the same with that in the defination of invoked method if and only if parameters of invoked method differs from each others.
reflection.ForInstance(v interface{}) is entrance to inject dependencies and invoke instance's method of a struct. By calling Map(key string, value interface{}) and Inject(), fields of specified struct can be injected by field name, allowing parameters own the same type while calling MapType(value interface{}) and InjectType() can also inject dependencies only when all types of fields are different from each other. After injecting dependencies, using Invoke(function string, params ...interface{}) and InvokeType(function string, params ...interface{}) can invoke a specified method of struct instance and differences between both are consistent with that of Call(params ...interface{}) and CallType(params ...interface{}).