func(s *Session) CallMethod(method string, value interface{}) { fm := reflect.ValueOf(s.RefTable().Model).MethodByName(method) if value != nil { fm = reflect.ValueOf(value).MethodByName(method) } param := []reflect.Value{reflect.ValueOf(s)} if fm.IsValid() { if v := fm.Call(param); len(v) > 0 { if err, ok := v[0].Interface().(error); ok { log.Error(err) } } } return }
钩子机制同样是通过反射来实现的,s.RefTable().Model 或 value 即当前会话正在操作的对象,使用 MethodByName 方法反射得到该对象的方法。
func(s *Session) CallMethod(method string, value interface{}) { fm := reflect.ValueOf(s.RefTable().Model).MethodByName(method) if value != nil { fm = reflect.ValueOf(value).MethodByName(method) } param := []reflect.Value{reflect.ValueOf(s)} if fm.IsValid() { if v := fm.Call(param); len(v) > 0 { if err, ok := v[0].Interface().(error); ok { log.Error(err) } } } return }
钩子机制同样是通过反射来实现的,s.RefTable().Model 或 value 即当前会话正在操作的对象,使用 MethodByName 方法反射得到该对象的方法。